android 实现可拖动的Button
01.package com.cn.lhq;02.import android.app.Activity;
03.import android.os.Bundle;
04.import android.util.DisplayMetrics;
05.import android.util.Log;
06.import android.view.MotionEvent;
07.import android.view.View;
08.import android.view.View.OnTouchListener;
09.import android.widget.Button;
10.import android.widget.Toast;
11.public class DraftTest extends Activity {
12. @Override
13. public void onCreate(Bundle savedInstanceState) {
14. super.onCreate(savedInstanceState);
15. setContentView(R.layout.main);
16. DisplayMetrics dm = getResources().getDisplayMetrics();
17. final int screenWidth = dm.widthPixels;
18. final int screenHeight = dm.heightPixels - 50;
19. final Button btn = (Button) findViewById(R.id.btn);
20. btn.setOnTouchListener(new OnTouchListener() {
21. int lastX, lastY;
22. @Override
23. public boolean onTouch(View v, MotionEvent event) {
24. // TODO Auto-generated method stub
25. int ea = event.getAction();
26. Log.i(\"TAG\", \"Touch:\" + ea);
27. switch (ea) {
28. case MotionEvent.ACTION_DOWN:
29. lastX = (int) event.getRawX();// 获取触摸事件触摸位置的原始X坐标
30. lastY = (int) event.getRawY();
31. break;
32. case MotionEvent.ACTION_MOVE:
33. int dx = (int) event.getRawX() - lastX;
34. int dy = (int) event.getRawY() - lastY;
35. int l = v.getLeft() + dx;
36. int b = v.getBottom() + dy;
37. int r = v.getRight() + dx;
38. int t = v.getTop() + dy;
39. // 下面判断移动是否超出屏幕
40. if (l < 0) {
41. l = 0;
42. r = l + v.getWidth();
43. }
44. if (t < 0) {
45. t = 0;
46. b = t + v.getHeight();
47. }
48. if (r > screenWidth) {
49. r = screenWidth;
50. l = r - v.getWidth();
51. }
52. if (b > screenHeight) {
53. b = screenHeight;
54. t = b - v.getHeight();
55. }
56. v.layout(l, t, r, b);
57. lastX = (int) event.getRawX();
58. lastY = (int) event.getRawY();
59. Toast.makeText(DraftTest.this,
60. \"当前位置:\" + l + \",\" + t + \",\" + r + \",\" + b,
61. Toast.LENGTH_SHORT).show();
62. v.postInvalidate();
63. break;
64. case MotionEvent.ACTION_UP:
65. break;
66. }
67. return false;
68. }
69. });
70. }
71.}
复制代码
package com.cn.lhq;
import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.Toast;
public class DraftTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DisplayMetrics dm = getResources().getDisplayMetrics();
final int screenWidth = dm.widthPixels;
final int screenHeight = dm.heightPixels - 50;
final Button btn = (Button) findViewById(R.id.btn);
btn.setOnTouchListener(new OnTouchListener() {
int lastX, lastY;
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int ea = event.getAction();
Log.i(\"TAG\", \"Touch:\" + ea);
switch (ea) {
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();// 获取触摸事件触摸位置的原始X坐标
lastY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int dx = (int) event.getRawX() - lastX;
int dy = (int) event.getRawY() - lastY;
int l = v.getLeft() + dx;
int b = v.getBottom() + dy;
int r = v.getRight() + dx;
int t = v.getTop() + dy;
// 下面判断移动是否超出屏幕
if (l < 0) {
l = 0;
r = l + v.getWidth();
}
if (t < 0) {
t = 0;
b = t + v.getHeight();
}
if (r > screenWidth) {
r = screenWidth;
l = r - v.getWidth();
}
if (b > screenHeight) {
b = screenHeight;
t = b - v.getHeight();
}
v.layout(l, t, r, b);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
Toast.makeText(DraftTest.this,
\"当前位置:\" + l + \",\" + t + \",\" + r + \",\" + b,
Toast.LENGTH_SHORT).show();
v.postInvalidate();
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
}
}
main.xml
01.<?xml version=\"1.0\" encoding=\"utf-8\"?>
02.<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
03. android:orientation=\"vertical\"
04. android:layout_width=\"fill_parent\"
05. android:layout_height=\"fill_parent\">
06. <Button
07. android:text=\"推动\"
08. android:id=\"@+id/btn\"
09. android:layout_width=\"wrap_content\"
10. android:layout_height=\"wrap_content\"/>
11.</LinearLayout>
页:
[1]