我必须创建一个正方形(400dp高度和400dp宽度)的弹出窗口。现在,当我点击位于弹出窗口左上方的按钮时,我想拖动它。我在其上放置在弹出的布局中设置onTouch(),这是我为了用它来拖动它的代码:Android:拖动弹出窗口
@Override
public boolean onTouch(View v, MotionEvent event) {
int eventAction = event.getAction();
switch (eventAction) {
case MotionEvent.ACTION_MOVE: // Drag event
xRow = (int) event.getRawX() - rootView.getWidth();
yRow = (int) event.getRawY() - rootView.getHeight();
/* Updates the position of the popup on the screen */
update(xRow, yRow, -1, -1);
break;
}
return true;
}
的问题是,这似乎只为的Nexus 7运行在平板电脑上10英寸它不能正常工作。当我将它拖放到较大的平板电脑上时,我的手指和弹出窗口之间会有空间。所以我假设我使用的度量单位不是正确的。我试图使用度量标准但没有成功。谁能帮我?
我看不到rootView的宽度如何有什么用getRawX()值。这里不应该有任何单位问题,因为一切都在原始像素,但我不确定你的计算逻辑是否合理。 – SDJMcHattie
通常,当我处理拖动对象时,我会在'MotionEvent.ACTION_DOWN'中注意触摸的原始X和原始Y位置。同时,我注意到将要移动的视图的原始位置。然后在'MotionEvent.ACTION_MOVE'中,我从新的X位置减去原来的X位置以获得deltaX值。我对Y做同样的事情来获得deltaY。然后,我将这些添加到被移动视图的原始位置,并获得完美跟踪您手指的平滑移动。 – SDJMcHattie
在down动作中计算两个deltas dx和dy:dx = currentx - event_raw_x,对于dy是相同的,并在移动动作中使用它们new_x = event_raw_x + dx和new_y相同 – pskink