Android imageview移动限制内的拖动

时间:2015-02-11 10:27:35

标签: android drag ontouchlistener

我长期以来一直在使用所有宽度和高度wrap_content在relativelayout中拖动图像的代码。执行时,它会显示闪烁的箭头图像,以在相对布局中设置imageview的y位置。你能否告诉我在任意限制内垂直拖动图像的方法。 ?

以下是我的代码:

dragImage.setOnTouchListener(new OnTouchListener(){
                //private int _xDelta;
                private int _yDelta;
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                v.getParent().requestDisallowInterceptTouchEvent(true);



                final float y = event.getY();

                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    //_yDelta = Y - lParams.topMargin;
                    mOldY2 = y;
                    break;
                case MotionEvent.ACTION_UP:
                    mViewPager.setPagingEnabled(true);
                    break;
                case MotionEvent.ACTION_POINTER_DOWN:
                    break;
                case MotionEvent.ACTION_POINTER_UP:
                    break;
                case MotionEvent.ACTION_MOVE:
                    btn4.setBackgroundResource(R.drawable.fbl02);
                    final float dy = y - mOldY2;
                    mNewY2 += dy;
                    mOldY2 = y;
                    System.out.println(mNewY2);                 

                    while(mNewY2 > 224){
                        mNewY2 -= 224;
                    }

                    while(mNewY2 < 157){
                        mNewY2 += 157;
                    }


                    if(mNewY2 < 157 || mNewY2 > 224)
                        break;

                    v.setTranslationY((int)mNewY2);

                    v.invalidate();

                    float power = (float) ( 51.5/67 -(0.2/67) * mNewY2) ;
                    System.out.println(power);

                    Float roundF = new Float( Math.round(power));
                    midBandStick = roundF;
                    btn4.setText(String.valueOf(midBandStick) );
                    //}
                    //break;
                }
                return true;

            }

1 个答案:

答案 0 :(得分:4)

试试这个,看看它是否有帮助

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        parent = (ViewGroup) findViewById(R.id.root);
image = (ImageView) findViewById(R.id.image1);
        parent.post(new Runnable() {

            @Override
            public void run() {
                originalX = (int) image1.getX();
                originalY = (int) image1.getY();
            }
        });


                image.setOnTouchListener(this);
    }

    public boolean onTouch(View view, MotionEvent event) {
        final int X = (int) event.getRawX();
        final int Y = (int) event.getRawY();
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view
                    .getLayoutParams();
            x = X - lParams.leftMargin;
            y = Y - lParams.topMargin;
            break;
        case MotionEvent.ACTION_UP:
            RelativeLayout.LayoutParams layout = (RelativeLayout.LayoutParams) view
                    .getLayoutParams();
            layout.leftMargin = originalX;
            layout.topMargin = originalY;
            view.setLayoutParams(layout);
            break;
        case MotionEvent.ACTION_MOVE:
            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view
                    .getLayoutParams();
            layoutParams.leftMargin = X - x;
            layoutParams.topMargin = Y - y;
            view.setLayoutParams(layoutParams);
            break;

        }
        parent.invalidate();
        return true;
    }

这将允许您在布局中拖动图像,当您离开图像时,它将返回到原始位置。