0

私は 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
4

1 に答える 1

0

LinearLayoutの向きが適切ですか? そうしないと、予期せずスケーリングされ、奇妙な結果が生じる可能性があります。

編集:デバッグに精通している場合は、どのグリッド要素がビューを受け取っているか、何が問題なのかを理解するのに大いに役立ちます。両方のエミュレーターで時間をかけて違いを理解してください。

于 2012-11-26T12:09:49.003 に答える