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;  
   }});  
 }
}

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>

源码分享爱好者:岳静

共同学习共同进步!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值