Android Api 8. Получить x и y из вида и установить x и y на кнопке - PullRequest
1 голос
/ 24 октября 2011

Я кодирую с помощью API 8.
Мне нужно получить координаты X и Y из View и установить их в качестве координат новой кнопки.
Я пробовал разные способы, но ничего не работает ....

Метод setX и getX работает только с API уровня 11, мне нужен способ сделать это на API8.

Это мой метод, позволяющий создать перетаскиваемую копию кнопки (эта копия - изображение, и когда я уронил, она стала новой кнопкой)

public boolean dragCopy(View view, MotionEvent me, Button bt){ 

        int x,y,w,h,id,t,l;
        int cont=-1;
        int coord[] = new int[2];


        bt2=new Button(this);


        id = bt.getId();
        bt2.setId(id);

        Resources res = getResources();

        cont = FindCont(bt, vector); 

        dr = getLetter(bt, dr,  res, vector, cont);
        w=dr.getIntrinsicWidth();
        h=dr.getIntrinsicHeight();


        if (me.getAction() == MotionEvent.ACTION_DOWN) {
            //clicked on the button. DRAG START
            status = START_DRAGGING;
            image = new ImageView(this);

            //set image drawable
            image.setImageDrawable(dr);
            image.setPadding((int)bt.getLeft(),(int)bt.getTop(), 0, 0);
            layout.addView(image, params);


        }
        if (me.getAction() == MotionEvent.ACTION_UP) {

            //button released. DROP
                        status = STOP_DRAGGING;
            x = (int) me.getRawX();
            y = (int) me.getRawY();

                        //create button compy from image
            bt2.setBackgroundDrawable(dr);
            bt2.setVisibility(View.VISIBLE);

                        //PROBLEMS  
            t= image.getTop();
            l= image.getLeft();
            bt2.setPadding(l, t, 0, 0);
            System.out.println("**************** T: "+t +"--- L: "+l);
            image.setVisibility(View.GONE);
                bt2.setLayoutParams(image.getLayoutParams());

                bt2.setWidth(w);
            bt2.setHeight(h);

            layout.addView(bt2);
                bt2.setDrawingCacheEnabled(true);
            bt2.setOnTouchListener(this);
            bt2.invalidate(); 
            image.invalidate();


        } else if (me.getAction() == MotionEvent.ACTION_MOVE) {

                        //i'm moving the image
            if (status == START_DRAGGING) {

                image.setPadding((int) me.getRawX(), (int) me.getRawY(), 0, 0);
                image.invalidate();

            }
        }
        return false;
    }

Ответы [ 3 ]

5 голосов
/ 24 октября 2011

Я не пробовал это, но я думаю, что это будет работать:

int buttonX = 50; // Arbitrary values - use whatever you want
int buttonY = 100;
int viewX = myView.getLeft();
int viewY = myView.getTop();

Button newButton = new Button();
newButton.setPadding(buttonX - viewX, buttonY - viewY, 0, 0);
// Other button setup

Это установит абсолютную позицию (50 100) на экране.Если вы хотите, чтобы он был (50 100) относительно угла вашего макета, используйте следующее:

int buttonX = 50; // Arbitrary values - use whatever you want
int buttonY = 100;

Button newButton = new Button();
newButton.setPadding(buttonX, buttonY, 0, 0);
// Other button setup

Это будет работать только для макетов, которые не размещают автоматически дочернее содержимое, например RelativeLayout.1007 *

5 голосов
/ 24 октября 2011

вы можете попробовать getTop () и getLeft ()?

0 голосов
/ 04 ноября 2011

Я воссоздаю свое перетаскивание, используя andengine. Прекрасно работает и лучше, чем раньше

...