在开发过程中难免会遇到有view需要拖动的情况,那么如何简单的制作一个可以自己随意拖动的view呢? 下面代码拷贝到项目中就好,
- 拷贝代码到项目中
- 把这个view类当成父类放到xml布局中,那么这个布局就可以随意拖动啦!
package cn.zhiup.mobile.course.live.tentcentLiveStudio;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.FrameLayout;
import cn.zhiup.baselayer.utils.ScreenUtils;
public class DragView extends FrameLayout{
float moveX;
float moveY;
public DragView(Context context) {
super(context);
}
public DragView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
moveX = event.getX();
moveY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float x = getX() + (event.getX() - moveX);
float y = getY() + (event.getY() - moveY);
if(x<0){
x=0;
}else if(x+getWidth()>ScreenUtils.getInstance().getScreenWidth(getContext())){
x=ScreenUtils.getInstance().getScreenWidth(getContext())-getWidth();
}
setTranslationX(x);
if(y<0){
y=0;
}else if(y+getHeight()+ScreenUtils.getInstance().getStatusHeight(getContext())>ScreenUtils.getInstance().getScreenHeight(getContext())){
y=ScreenUtils.getInstance().getScreenHeight(getContext())-getHeight()-ScreenUtils.getInstance().getStatusHeight(getContext());
}
setTranslationY(y);
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_CANCEL:
break;
}
return true;
}
}
依赖代码
- 获得手机状态栏高度
/**
* 获得状态栏的高度
*
* @param context
* @return
*/
public int getStatusHeight(Context context) {
int statusHeight = -1;
try {
Class<?> clazz = Class.forName("com.android.internal.R$dimen");
Object object = clazz.newInstance();
int height = Integer.parseInt(clazz.getField("status_bar_height").get(object).toString());
statusHeight = context.getResources().getDimensionPixelSize(height);
} catch (Exception e) {
e.printStackTrace();
}
return statusHeight;
}
- 获得手机屏幕高度
/**
* 获得屏幕高度
*
* @param context
* @return
*/
public int getScreenHeight(Context context) {
WindowManager mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics mDisplayMetrics = new DisplayMetrics();
mWindowManager.getDefaultDisplay().getMetrics(mDisplayMetrics);
return mDisplayMetrics.heightPixels;
}
- 获得手机屏幕宽度
/**
* 获取屏幕宽度
*
* @param context
* @return
*/
public int getScreenWidth(Context context) {
WindowManager mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics mDisplayMetrics = new DisplayMetrics();
mWindowManager.getDefaultDisplay().getMetrics(mDisplayMetrics);
return mDisplayMetrics.widthPixels;
}