可拖拽的ImageButton

所有的View都可以实现onTouchListener,我们可以监听此方法去获取控件的坐标,

然后重绘控件的位置

上个图:



import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageButton; import android.widget.Toast; public class DraftButtonActivity extends Activity {        @Override       public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.main);            DisplayMetrics dm = getResources().getDisplayMetrics();            final int screenWidth = dm.widthPixels;            final int screenHeight = dm.heightPixels - 50;            final ImageButton btn = (ImageButton) findViewById(R.id.btn);            btn.setOnTouchListener(new OnTouchListener() {                int lastX, lastY;                @Override               public boolean onTouch(View v, MotionEvent event) {                    // TODO Auto-generated method stub                   int ea = event.getAction();                    Log.i("TAG", "Touch:" + ea);                    switch (ea) {                    case MotionEvent.ACTION_DOWN:                        lastX = (int) event.getRawX();// 获取触摸事件触摸位置的原始X坐标                        lastY = (int) event.getRawY();                        break;                    case MotionEvent.ACTION_MOVE:                       int dx = (int) event.getRawX() - lastX;                        int dy = (int) event.getRawY() - lastY;                       int l = v.getLeft() + dx;                       int b = v.getBottom() + dy;                        int r = v.getRight() + dx;                        int t = v.getTop() + dy;                       // 下面判断移动是否超出屏幕                        if (l < 0) {                            l = 0;                           r = l + v.getWidth();                        }                        if (t < 0) {                          t = 0;                            b = t + v.getHeight();                        }                        if (r > screenWidth) {                            r = screenWidth;                            l = r - v.getWidth();                       }                        if (b > screenHeight) {                            b = screenHeight;                           t = b - v.getHeight();                       }                        v.layout(l, t, r, b);                        lastX = (int) event.getRawX();                       lastY = (int) event.getRawY();                        Toast.makeText(DraftButtonActivity.this,                                "当前位置:" + l + "," + t + "," + r + "," + b,                                Toast.LENGTH_SHORT).show();                       v.postInvalidate();                        break;                                       case MotionEvent.ACTION_UP:                      break;                   }                   return false;                }            });        }    }  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值