【问题标题】:Letting custom view to move only downwards让自定义视图仅向下移动
【发布时间】:2018-06-12 21:39:49
【问题描述】:

我使用以下代码让用户移动 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;
    }

}

我使用上面的代码让用户拖动图像视图。此代码有效。然而,它也允许用户向左和向右移动图像。 我试图让它只向底部移动,而不是向上或向左或向右移动。请问我该如何解决这个问题?

【问题讨论】:

    标签: android user-interface imageview


    【解决方案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(垂直的)。

    更新: 锁向上滑动

    【讨论】:

    • 工作正常...但是可以防止向上移动吗?
    • 你的意思是没有办法往上走?一旦他向下滑动它,就没有选择返回它的权利吗?
    • 等等,让我试试代码,我修复它,所以它就挂了。
    • 更新了我的答案,我也试过了。它有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多