java在安卓上拖放一个按钮。。帮助
我试图拖放一个按钮,问题是当我在motion event中使用getX()时,它会工作,但按钮开始颤抖。当我调用getRawX()方法时,它不会颤抖,但在我开始拖放之前,它至少跳了80px
我怎么能做到这一点,我将在这里发布我的代码:
public class MyButton extends Button {
private final static int START_DRAGGING = 0;
private final static int STOP_DRAGGING = 1;
private int status;
private LinearLayout parentLayout;
public MyButton(Context context) {
super(context);
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Log.i("teste", "Button width: " + btWidth + ", Height : "+ btHeight);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
status = START_DRAGGING;
Log.i("teste", "Coordenada on ACTION_DOWN: " + (int) event.getRawX());
break;
case MotionEvent.ACTION_UP:
status = STOP_DRAGGING;
Log.i("teste", "Coordenada on ACTION_UP: " + (int) event.getRawX());
break;
case MotionEvent.ACTION_MOVE:
if(status == START_DRAGGING){
parentLayout.setPadding((int)event.getRawX(), 0,0,0);
parentLayout.invalidate();
Log.i("teste", "Coordenada on ACTION_MOVE: " + (int) event.getRawX());
}
break;
}
return true;
}
}
# 1 楼答案
我也一直在研究触摸和移动物体。我开始做一些类似的动作:改变顶部和左侧的填充物。很快,当我在屏幕上添加更多可移动的对象时,事情变得有点混乱。我会触摸屏幕上的一个点,其他东西就会开始移动。当时的情况是,屏幕上有多个重叠的视图。只有俯视图才会接收触摸事件
我发现了一篇帖子,建议大家看看安卓启动器的代码,看看它们是如何拖放的。我认为他们的方法真的很好。您确实需要添加一个视图组来保存可移动对象,但这是可行的。浏览范围与你在屏幕上看到的内容相匹配,你最终不会感到意外。事件会转到您期望的视图
如果事实证明你将拥有不止一个可移动的对象,你可能想看看我的博客帖子:“Moving Views In Android”。还有更多关于Android启动器和源代码的解释