更改屏幕大小时DragDrop应用程序出错

时间:2012-11-26 11:09:01

标签: android

我在android上制作一个小应用程序,它基于使用shadowbuilder的dragdrop,我使用了一个带有屏幕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

1 个答案:

答案 0 :(得分:0)

你确定LinearLayout有正确的方向吗?如果不是,它可能意外地扩展并提供奇怪的结果。

编辑:如果您熟悉调试,它将帮助您了解哪个网格元素正在接收视图以及出了什么问题。用两个模拟器给它一些时间并找出差异。