让自定义视图仅向下移动

时间:2018-01-03 08:16:17

标签: android user-interface imageview

我使用以下代码让用户移动imageview。我已经创建了相同的自定义imageview。

public class MovableImageView extends android.support.v7.widget.AppCompatImageView implements ImageView.OnTouchListener{

    float x,y =0;
    private static final String TAG = MovableImageView.class.getSimpleName();

    public MovableImageView(Context context) {
        super(context);
        setOnTouchListener(this);

    }

    public MovableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOnTouchListener(this);
    }

    public MovableImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setOnTouchListener(this);
    }


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {


            case MotionEvent.ACTION_DOWN:

                x = this.getX() - event.getRawX();
                y = this.getY() - event.getRawY();
                break;

            case MotionEvent.ACTION_MOVE:

                this.animate()
                        .x(event.getRawX() + x)
                        .y(event.getRawY() + y)
                        .setDuration(0)
                        .start();
                Log.e("pos","x:"+String.valueOf(event.getRawX() + x)+"y:"+String.valueOf(event.getRawX() + y));

                break;
            default:
                return false;
        }
        return true;
    }

}

我使用上面的代码让用户拖动imageview。这段代码有效。但是,它还允许用户向左和向右移动图像。 我试图让它只向底部移动,而不是向上或向左或向右移动。我可以知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

public class MovableImageView extends android.support.v7.widget.AppCompatImageView implements ImageView.OnTouchListener{

    float y =0;
    private static final String TAG = MovableImageView.class.getSimpleName();

    public MovableImageView(Context context) {
        super(context);
        setOnTouchListener(this);

    }

    public MovableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOnTouchListener(this);
    }

    public MovableImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setOnTouchListener(this);
    }


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {


            case MotionEvent.ACTION_DOWN:

                y = this.getY() - event.getRawY();
                break;

            case MotionEvent.ACTION_MOVE:

                if (this.getY() < event.getRawY() + y) { //checks if the new position is greater (means going down) to the current position
                   this.animate()
                        .y(event.getRawY() + y)
                        .setDuration(0)
                        .start();
                   Log.e("pos","y:"+String.valueOf(event.getRawY() + y));
                }
                break;
            default:
                return false;
        }
        return true;
    }

}

基本上,我刚删除了您的所有x-axis代码,因此只会使用y-axis(垂直版)。

<强>更新 锁定向上滑动