Android下图片或按钮等可拖动到任意位置的效果实现源码

Android下图片可拖动到任意位置的效果
下面为Activity的代码:

public class DraftTest extends Activity {
 /** Called when the activity is first created. */  
 @Override  
 public void onCreate(Bundle savedInstanceState) {   
  super.onCreate(savedInstanceState);   
  setContentView(R.layout.sign);
  DisplayMetrics dm = getResources().getDisplayMetrics();
  final int screenWidth = dm.widthPixels;   
  final int screenHeight = dm.heightPixels - 50;   
  //拖动的按钮
  final Button b=(Button)findViewById(R.id.startBtn);  

  //添加触摸事件

  b.setOnTouchListener(new OnTouchListener(){
   int lastX, lastY; //记录移动的最后的位置
   public boolean onTouch(View v, MotionEvent event) {   
    //获取Action

    int ea=event.getAction();  

    Log.i("TAG", "Touch:"+ea);
    switch(ea){   
    case MotionEvent.ACTION_DOWN:   //按下
     lastX = (int) event.getRawX();   
     lastY = (int) event.getRawY();   
     break;   
     /**  
      * layout(l,t,r,b)  
      * l  Left position, relative to parent   
                    t  Top position, relative to parent   
                    r  Right position, relative to parent   
                    b  Bottom position, relative to parent    
      * */  
    case MotionEvent.ACTION_MOVE:  //移动
     //移动中动态设置位置
     int dx =(int)event.getRawX() - lastX;   
     int dy =(int)event.getRawY() - lastY;   
     int left = v.getLeft() + dx;   
     int top = v.getTop() + dy;   
     int right = v.getRight() + dx;   
     int bottom = v.getBottom() + dy;   
     if(left < 0){   
      left = 0;   
      right = left + v.getWidth();   
     }   
     if(right > screenWidth){   
      right = screenWidth;   
      left = right - v.getWidth();   
     }   
     if(top < 0){   
      top = 0;   
      bottom = top + v.getHeight();   
     }   
     if(bottom > screenHeight){   
      bottom = screenHeight;   
      top = bottom - v.getHeight();   
     }   
     v.layout(left, top, right, bottom);   
     Log.i("", "position:" + left +", " + top + ", " + right + ", " + bottom);
     //将当前的位置再次设置
     lastX = (int) event.getRawX();   
     lastY = (int) event.getRawY();   
     break;   
    case MotionEvent.ACTION_UP:   //脱离
     break;                 
    }   
    return false;   
   }});   
 } 
}

XML配置文件Sign.xml的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/layoutRacingNeedForSpeed" android:padding="0px"
 android:layout_width="fill_parent" android:layout_height="fill_parent">
 <Button 
  android:id="@+id/startBtn"
  android:text="tuodongdeanniu"
  android:layout_centerInParent="true"
  android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</RelativeLayout>

这样就可以实现了~

转载于:https://my.oschina.net/castusz/blog/66338

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值