Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 圖片拖動

Android 圖片拖動

編輯:關於Android編程

  1. public class TestDemo extends Activity {
  2. private ImageView img1;
  3. private int screenWidth;
  4. private int screenHeight;
  5. /** Called when the activity is first created. */
  6. @Override
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. img1 = (ImageView) findViewById(R.id.imageView1);
  11. DisplayMetrics dm = getResources().getDisplayMetrics();
  12. screenWidth = dm.widthPixels;
  13. screenHeight = dm.heightPixels - 50;
  14. img1.setOnTouchListener(movingEventListener);
  15. }
  16. private OnTouchListener movingEventListener = new OnTouchListener() {
  17. int lastX, lastY;
  18. @Override
  19. public boolean onTouch(View v, MotionEvent event) {
  20. switch (event.getAction()) {
  21. case MotionEvent.ACTION_DOWN:
  22. lastX = (int) event.getRawX();
  23. lastY = (int) event.getRawY();
  24. break;
  25. case MotionEvent.ACTION_MOVE:
  26. int dx = (int) event.getRawX() - lastX;
  27. int dy = (int) event.getRawY() - lastY;
  28. int left = v.getLeft() + dx;
  29. int top = v.getTop() + dy;
  30. int right = v.getRight() + dx;
  31. int bottom = v.getBottom() + dy;
  32. // 設置不能出界
  33. if (left < 0) {
  34. left = 0;
  35. right = left + v.getWidth();
  36. }
  37. if (right > screenWidth) {
  38. right = screenWidth;
  39. left = right - v.getWidth();
  40. }
  41. if (top < 0) {
  42. top = 0;
  43. bottom = top + v.getHeight();
  44. }
  45. if (bottom > screenHeight) {
  46. bottom = screenHeight;
  47. top = bottom - v.getHeight();
  48. }
  49. v.layout(left, top, right, bottom);
  50. lastX = (int) event.getRawX();
  51. lastY = (int) event.getRawY();
  52. break;
  53. case MotionEvent.ACTION_UP:
  54. break;
  55. }
  56. return true;
  57. }



    XML布局

    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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




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

    對於onTouchEvent 中onTouch返回值

    1 、如果return false 說明還沒有消費onTouch事件,在執行onTouch裡代碼後,onTouch事件並沒有結束。

    2、如果return true 說明消費了onTouch事件 onTouch事件結束了

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


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved