1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android 可移动view Android--自定义可拖动view

android 可移动view Android--自定义可拖动view

时间:2019-02-18 18:40:52

相关推荐

android 可移动view Android--自定义可拖动view

//该可拖动view主要是有两个imageview,一个用来隐藏该view,一个用来做正常的点击事件。

public DragView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

LayoutInflater inflater = LayoutInflater.from(context);

View view = inflater.inflate(R.layout.dragview, this);

iv_close = view.findViewById(R.id.iv_close);

iv_pic = view.findViewById(R.id.iv_pic);

}

主要想法是判断ACTION_DOWN手指按下时,按下的位置是否是关闭的那个imageview

//判断是否触摸view

private boolean isTouchInView(ImageView view, float xAxis, float yAxis) {

if (view== null) {

return false;

}

int[] location = new int[2];

view.getLocationOnScreen(location);

int left = location[0];

int top = location[1];

int right = left + view.getMeasuredWidth();

int bottom = top + view.getMeasuredHeight();

if (yAxis >= top && yAxis <= bottom && xAxis >= left

&& xAxis <= right) {

return true;

}

return false;

}

主要方法进行触摸拦截,使得view随手指移动

@Override

public boolean onTouchEvent(MotionEvent event) {

//获取相对屏幕的坐标,即以屏幕左上角为原点

rawX = (int) event.getRawX();

rawY = (int) event.getRawY();

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN: //捕获手指触摸按下动作

//获取相对View的坐标,即以此View左上角为原点

mStartX = event.getRawX();

mStartY = event.getRawY();

if (isTouchInView(iv_close,rawX,rawY)){

flag = true;

}

mLastTime = System.currentTimeMillis();

lastX=rawX;

lastY=rawY;

if(getParent()!=null){

parent= (ViewGroup) getParent();

pHeight=parent.getHeight();

pWidth=parent.getWidth();

}

break;

case MotionEvent.ACTION_MOVE: //捕获手指触摸移动动作

int dx=rawX-lastX;

int dy=rawY-lastY;

float x=getX()+dx;

float y=getY()+dy;

//判断是否到边界

x = x < 0 ? 0 : x > pWidth - getWidth() ? pWidth - getWidth() : x;

y = getY() < 0 ? 0 : getY() + getHeight() > pHeight ? pHeight - getHeight() : y;

setX(x);

setY(y);

lastX=rawX;

lastY=rawY;

break;

case MotionEvent.ACTION_UP: //捕获手指触摸离开动作

if(System.currentTimeMillis() - mLastTime < 800){

if(Math.abs(mStartX- event.getRawX() )< 10.0 && Math.abs(mStartY - event.getRawY()) < 10.0){

//处理点击的事件

if (flag){

dragViewClickListener.onDragViewListener("delete","");

}else

dragViewClickListener.onDragViewListener("pic","");

}

}

flag = false;

break;

}

return true;

}

在layout中使用

android:id="@+id/DragView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

tools:layout_editor_absoluteX="0dp"

tools:layout_editor_absoluteY="0dp"

tools:ignore="MissingConstraints" />

自定义接口

在activity中使用

效果

点击关闭imageview时

一个小小的记录--积跬步,至千里

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。