频道栏目
首页 > 资讯 > Android > 正文

Android 图片拖动

15-02-14        来源:[db:作者]  
收藏   我要投稿
  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事件就捕捉不到了。


相关TAG标签
上一篇:ExtJs表格控件(三)----单元格编辑与提交修改
下一篇:jQuery选择器代码详解—实例说明tokenize的解析过程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站