让自定义视图仅向下移动
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
(垂直的)。
更新:锁定向上滑动
以上是关于让自定义视图仅向下移动的主要内容,如果未能解决你的问题,请参考以下文章