实现可拖动的按钮视图
2013-08-14 16:55
155 查看
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) {
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
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:orientation=\"vertical\"
android:layout_width=\"fill_parent\"
android:layout_height=\"fill_parent\">
<Button
android:text=\"拖动\"
android:id=\"@+id/btn\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"/>
</LinearLayout>
@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) {
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
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:orientation=\"vertical\"
android:layout_width=\"fill_parent\"
android:layout_height=\"fill_parent\">
<Button
android:text=\"拖动\"
android:id=\"@+id/btn\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"/>
</LinearLayout>
相关文章推荐
- android 应用内部悬浮可拖动按钮简单实现代码
- 惊!一分钟、超简单实现可拖动的按钮
- iPhone实现QQ等app中右拖动屏幕返回上一层视图切换的效果(继承UINavigationController)
- 实现按钮拖动到底部,与底部按钮互换的功能
- 安卓实现按钮可随意拖动(同时解决click和touch事件的冲突)
- iOS中实现视图的拖动
- Yii视图CGridView实现操作按钮定义地址示例
- c#实现按钮拖动效果
- 全代码实现折叠式按钮视图NSArray UIView UIButton UILabel
- 论坛源码推荐(8月27日):创建可拖动视图,社交类应用图片预览的实现
- Android自定义View实现拖动选择按钮
- iOS之实现按钮拖动/tableViewcell多选,拖动/collectionviewcell多选,拖动(交换位置)
- android实现按钮拖动效果及路径的绘制等2D绘图功能---待完善
- 点击button按钮后,启动一个实现鼠标拖动另一个button的线程 (JFrame/C# WinForm)
- 通过按钮控件实现MDI新建子窗口(MFC自动生成的视图、文档、子框架共用)
- android 实现可以拖动的按钮
- 基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
- iPhone实现QQ等app中右拖动屏幕返回上一层视图切换的效果(继承UINavigationController)
- android实现可拖动按钮
- iPhone实现QQ等app中右拖动屏幕返回上一层视图切换的效果(继承UINavigationController)