移动ImageView的触摸事件 [英] Moving imageview with touch event

查看:199
本文介绍了移动ImageView的触摸事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只想要一个简单的事情 我哈瓦一个ImageView的,我可以用触摸移动

i just want a simple thing I hava a imageview and i can move it with touch

这是我的code,对不起,如果这错误的,因为我只是试试吧

This is my code, im sorry if this wrong because i just try it myself

img.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            // TODO Auto-generated method stub
        if(arg1.getAction()==MotionEvent.ACTION_DOWN)
        {
            status=StartDrag;
        }
        else if(arg1.getAction()==MotionEvent.ACTION_UP)
        {
            status=StopDrag;
        }
        return false;
        }
    });

@Override
     public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub

    if( status==StartDrag)
    {
    params.leftMargin = (int)event.getX();
    params.topMargin = (int)event.getY();
    img.setLayoutParams(params);
    }
return super.onTouchEvent(event);

}

u能告诉我正确的方式吗?谢谢:D

Can u show me the right way please? Thanks :D

推荐答案

onTouch 的拖动意见的活动可以完美的 RelativeLayout的的FrameLayout

onTouch events for dragging views works perfect for child views of RelativeLayout and FrameLayout.

下面是一个例子:

@Override
public boolean onTouch(View v, MotionEvent event){
        switch(event.getAction())
        {
            case MotionEvent.ACTION_DOWN :
            {
                x = event.getX();
                                    y = event.getY();
                dx = x-myView.getX();
                dy = y-myView.getY();
            }
            break;
            case MotionEvent.ACTION_MOVE :
            {
                myView.setX(event.getX()-dx);
                myView.setY(event.getY()-dy);
            }
            break;
            case MotionEvent.ACTION_UP :
            {
                //your stuff
            }
        return true;
}

现在是什么 DX DY 确实是,在 ACTION_DOWN 它记录您在其中谈到的观点,并从左右(x)获得差异和顶部(Y)的观点,以维持这些利润中 ACTION_MOVE

Now what dx and dy does is, on ACTION_DOWN it records where you have touched on the view, and gets difference from left (x) and top (y) of the view, to maintain those margins during ACTION_MOVE.

返回触摸事件必须是如果你参加了。

Return of touch event has to be true if you are attending it.

更新:对于API 8

在的情况下API 8日,的getX() getY()以方法不是给予正确的结果,这样你就可以用的是 getRawX() getRawY()的方法。

In case of API 8, The getX() and getY() methods are not giving correct results, so what you can use is getRawX() and getRawY() methods.

例如:

RelativeLayout.LayoutParams parms;
LinearLayout.LayoutParams par;
float dx=0,dy=0,x=0,y=0;

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch(event.getAction())
    {
        case MotionEvent.ACTION_DOWN :
        {
            parms = (LayoutParams) myView.getLayoutParams();
            par = (LinearLayout.LayoutParams) getWindow().findViewById(Window.ID_ANDROID_CONTENT).getLayoutParams();
            dx = event.getRawX() - parms.leftMargin;
            dy = event.getRawY() - parms.topMargin;
        }
        break;
        case MotionEvent.ACTION_MOVE :
        {
            x = event.getRawX();
            y = event.getRawY();
            parms.leftMargin = (int) (x-dx);
            parms.topMargin = (int) (y - dy);
            myView.setLayoutParams(parms);
        }
        break;
        case MotionEvent.ACTION_UP :
        {

        }
        break;
    }
    return true;
}

这篇关于移动ImageView的触摸事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆