一个点击拖动的button,为了测试onTouch方法,给button添加onTouchListener,这个listener要重写public boolean onTouch(View v, MotionEvent event)方法,这里同时测试了是否超出屏幕范围,如果超出了,就以超出部分的屏幕界限做为最终显示位置。代码如下:
1 public class MoveButtonActivity extends Activity { 2 public Button moveb; 3 /** Called when the activity is first created. */ 4 @Override 5 public void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.main); 8 moveb = (Button) findViewById(R.id.mb); 9 DisplayMetrics dm = getResources().getDisplayMetrics(); 10 final int screenWidth = dm.widthPixels; 11 final int screenHeight = dm.heightPixels - 50; 12 moveb.setOnTouchListener(new OnTouchListener() { 13 int end_x, end_y; 14 @Override 15 public boolean onTouch(View v, MotionEvent event) { 16 // TODO Auto-generated method stub 17 switch (event.getAction()) { 18 case MotionEvent.ACTION_DOWN: 19 end_x = (int) event.getRawX(); 20 end_y = (int) event.getRawY(); 21 break; 22 case MotionEvent.ACTION_MOVE: 23 int dx = (int) event.getRawX() - end_x; 24 int dy = (int) event.getRawY() - end_y; 25 int l = v.getLeft() + dx; 26 int b = v.getBottom() + dy; 27 int r = v.getRight() + dx; 28 int t = v.getTop() + dy; 29 // 下面判断移动是否超出屏幕 30 if (l < 0) { 31 l = 0; 32 r = l + v.getWidth(); 33 } 34 if (t < 0) { 35 t = 0; 36 b = t + v.getHeight(); 37 } 38 if (r > screenWidth) { 39 r = screenWidth; 40 l = r - v.getWidth(); 41 } 42 if (b > screenHeight) { 43 b = screenHeight; 44 t = b - v.getHeight(); 45 } 46 v.layout(l, t, r, b); 47 end_x = (int) event.getRawX(); 48 end_y = (int) event.getRawY(); 49 Toast.makeText(MoveButtonActivity.this, "当前位置:" + l + "," + t + "," + r + "," + b, Toast.LENGTH_SHORT).show(); 50 v.postInvalidate(); 51 break; 52 case MotionEvent.ACTION_UP: 53 Toast.makeText(MoveButtonActivity.this, "离开屏幕", Toast.LENGTH_SHORT).show(); 54 break; 55 } 56 return false; 57 } 58 }); 59 } 60 }
这个很简单 没的解释~当时就为了试试onTouch