让自定义视图仅向下移动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让自定义视图仅向下移动相关的知识,希望对你有一定的参考价值。

我使用以下代码让用户移动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。这段代码有效。但是,它还允许用户向左和向右移动图像。我试图让它只向底部移动,而不是向上或向左或向右移动。我可以知道如何才能解决这个问题?

答案

试试这个:

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(垂直的)。

更新:锁定向上滑动

以上是关于让自定义视图仅向下移动的主要内容,如果未能解决你的问题,请参考以下文章

用片段替换时操作栏向下移动

如何让自定义 UIButton 仅响应不透明部分的点击?

如何让自定义表格视图单元格扩展到表格末尾?

如何设置x和y移动动画片段的最大/限制?

如何让自定义标签栏显示标签栏项目在 Xcode 中设置的选定图像?

基于String Array项,向下一个片段显示相同的项