私は Android で小さなアプリケーションを作成しています。それは shadowbuilder を使用したドラッグドロップに基づいています。画面 wvga800 (800x480) のエミュレーターを使用しました。要素をグリッドにドラッグすると、目的のグリッドに適切にドロップされます。次に、画面wxga800-7in(1280-800)で別のエミュレーターを使用しましたが、すべてうまくいきませんでした。要素はグリッド内にドロップしなくなり、別の位置に移動したように見えます。注: レイアウト XML ファイルでは、使用される単位は dp です。ここでの問題は正確には何ですか?助けてください。
助けてくれてありがとう。
以下は、タッチ リスナーとドラッグ リスナーのコードです。
private final class MyTouchListener implements OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view,0);
view.setVisibility(View.INVISIBLE);
return true;}
else {
return false;
}
}
}//class MyTouchListener
class MyDragListener implements View.OnDragListener {
Drawable enterShapeAcp = getResources().getDrawable(R.drawable.shape_droptargetacp);
Drawable enterShapeRej= getResources().getDrawable(R.drawable.shape_droptargetrej);
Drawable normalShape = getResources().getDrawable(R.drawable.shape);
@Override
public boolean onDrag(View v, DragEvent event) {
// int action = event.getAction();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:{
break;}
case DragEvent.ACTION_DRAG_ENTERED:{
grid(v.getX(),v.getY());
v.setBackgroundDrawable(enterShapeAcp);
break;}
case DragEvent.ACTION_DRAG_EXITED:{
v.setBackgroundDrawable(normalShape);
break;}
case DragEvent.ACTION_DROP:{
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
LinearLayout container = (LinearLayout) v;
container.addView(view);
view.setVisibility(View.VISIBLE);
break;}
case DragEvent.ACTION_DRAG_ENDED:{
v.setBackgroundDrawable(normalShape);
break;}
default:{
break;}
}//switch
return true;
}//onDrag
}//class MyDragListener