Android 图片拖动

来源:互联网 发布:淘宝即将上架抢购攻略 编辑:程序博客网 时间:2024/06/07 08:48
  1. public class TestDemo extends Activity {  
  2.     private ImageView img1;  
  3.     private int screenWidth;  
  4.     private int screenHeight;  
  5.   
  6.     /** Called when the activity is first created. */  
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.   
  12.         img1 = (ImageView) findViewById(R.id.imageView1);  
  13.           
  14.   
  15.         DisplayMetrics dm = getResources().getDisplayMetrics();  
  16.         screenWidth = dm.widthPixels;  
  17.         screenHeight = dm.heightPixels - 50;  
  18.   
  19.         img1.setOnTouchListener(movingEventListener);  
  20.       
  21.     }  
  22.   
  23.     private OnTouchListener movingEventListener = new OnTouchListener() {  
  24.         int lastX, lastY;  
  25.   
  26.         @Override  
  27.         public boolean onTouch(View v, MotionEvent event) {  
  28.             switch (event.getAction()) {  
  29.             case MotionEvent.ACTION_DOWN:  
  30.                 lastX = (int) event.getRawX();  
  31.                 lastY = (int) event.getRawY();  
  32.                 break;  
  33.             case MotionEvent.ACTION_MOVE:  
  34.                 int dx = (int) event.getRawX() - lastX;  
  35.                 int dy = (int) event.getRawY() - lastY;  
  36.   
  37.                 int left = v.getLeft() + dx;  
  38.                 int top = v.getTop() + dy;  
  39.                 int right = v.getRight() + dx;  
  40.                 int bottom = v.getBottom() + dy;  
  41.                 // 设置不能出界  
  42.                 if (left < 0) {  
  43.                     left = 0;  
  44.                     right = left + v.getWidth();  
  45.                 }  
  46.   
  47.                 if (right > screenWidth) {  
  48.                     right = screenWidth;  
  49.                     left = right - v.getWidth();  
  50.                 }  
  51.   
  52.                 if (top < 0) {  
  53.                     top = 0;  
  54.                     bottom = top + v.getHeight();  
  55.                 }  
  56.   
  57.                 if (bottom > screenHeight) {  
  58.                     bottom = screenHeight;  
  59.                     top = bottom - v.getHeight();  
  60.                 }  
  61.   
  62.                 v.layout(left, top, right, bottom);  
  63.   
  64.                 lastX = (int) event.getRawX();  
  65.                 lastY = (int) event.getRawY();  
  66.   
  67.                 break;  
  68.             case MotionEvent.ACTION_UP:  
  69.                 break;  
  70.             }  
  71.             return true;  
  72.         }  



XML布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/show_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/a" />
</RelativeLayout>




其中 在onTouch 代码中 如果返回 false 就不能捕捉到ACTION_MOVE 事件。

 对于onTouchEvent 中onTouch返回值

1 、如果return false 说明还没有消费onTouch事件,在执行onTouch里代码后,onTouch事件并没有结束。

2、如果return true 说明消费了onTouch事件 onTouch事件结束了

但在实际操作中 除了ACTION_DOWN事件以外,其余的事件只有返回true的那个方法才能捕捉到。所以 返回false的时候只能捕捉到每次的第一个DOWN事件 后面的MOVE 和UP事件就捕捉不到了。


0 0
原创粉丝点击