Android控件的拖动
2015-09-19 14:01
387 查看
Android控件的拖动,主要是通过设置控件的setOnTouchListener()方法,重写它的onTouch()方法。然后通过MotionEvent的不同事件,进行判断,主要是在MotionEvent.ACTION_MOVE中不断重绘控件在画布中的位置,而实现拖动的效果。
public class DragViewActivity extends AppCompatActivity { private Button btn_drag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_drag_view); // 获取屏幕的宽高 DisplayMetrics dm = getResources().getDisplayMetrics(); final int screenWith = dm.widthPixels; final int screenHeight = dm.heightPixels; btn_drag = (Button) findViewById(R.id.btn_drag); btn_drag.setOnTouchListener(new View.OnTouchListener() { int lastX; int lastY; boolean isDraging = false; @Override public boolean onTouch(View v, MotionEvent event) { int ee = event.getAction(); switch (ee){ case MotionEvent.ACTION_DOWN: isDraging = true; lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: if (isDraging){ // x轴方向的位移差 int dx = (int) event.getRawX() - lastX; // y轴方向的位移差 int dy = (int) event.getRawY() - lastY; int l = v.getLeft() + dx; int t = v.getTop() + dy; int r = v.getRight() + dx; int b = v.getBottom() + dy; // 判断超出屏幕 if (l < 0){ l = 0; r = l + v.getWidth(); } if (t < 0){ t = 0; b = t + v.getHeight(); } if (r > screenWith){ r = screenWith; l = r - v.getWidth(); } if (b > screenHeight){ b = screenHeight; t = b - v.getHeight(); } // 重绘view v.layout(l, t, r, b); v.postInvalidate(); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); } break; case MotionEvent.ACTION_UP: isDraging = false; break; default: break; } return false; } }); }
相关文章推荐
- Android教程-01 Android Studio创建第一个项目
- Android教程-01 Android Studio创建第一个项目
- Java Design Demo -简单的队列-异步多任务队列(java android)
- List中使用继承关系泛型 实战
- Android 获取Wifi下的IP地址
- Android 获取Wifi下的IP地址
- 采用proguard困惑android代码
- android 两个线程的交互
- android 数据库升级
- android事件传递机制的详细了解
- Android定调的发展
- android 内存优化
- Android开发之SurfaceView详解
- Android Studio如何关联SVN
- 【MDCC技术大咖秀】Android内存优化之OOM
- Android Studio——LinerLayout
- Android-MaterialRefreshLayout
- Android Studio安装之后简单设置
- android sdk更新
- android studio-友盟多渠道打包方式