public class TestActivity extends AppCompatActivity {
private ImageView iv1;
private float downX;
private float downY;
private int screenWidth;
private int screenHeight;
private int actionBarHeight = 0;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_boll_free_fall);
screenWidth= getDispaly(this).widthPixels;
screenHeight= getDispaly(this).heightPixels;
iv1 = findViewById(R.id.iv_1);
iv1.post(new Runnable() {
@Override
public void run() {
if(getSupportActionBar() != null){
actionBarHeight = getSupportActionBar().getHeight();
Log.d("xiazhenjie","actionBarHeight--" + actionBarHeight);
}
}
});
iv1.setOnTouchListener((v, event) -> {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
downX = event.getX();
downY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
Log.e("kid","ACTION_MOVE");
final float xDistance = event.getX() - downX;
final float yDistance = event.getY() - downY;
int l, r, t, b;
//当水平或者垂直滑动距离大于10,才算拖动事件
if (Math.abs(xDistance) > 10 || Math.abs(yDistance) > 10) {
l = (int) (iv1.getLeft() + xDistance);
r = l + iv1.getWidth();
t = (int) (iv1.getTop() + yDistance);
b = t + iv1.getHeight();
//不划出边界判断,此处应按照项目实际情况,因为本项目需求移动的位置是手机全屏,
// 所以才能这么写,如果是固定区域,要得到父控件的宽高位置后再做处理
if(l < 0){
l = 0;
r = l + iv1.getWidth();
}else if(r > screenWidth){
r = screenWidth;
l = r - iv1.getWidth();
}
if(t < 0){
t = 0;
b = t + iv1.getHeight();
}else if(b > screenHeight - actionBarHeight){//如果有Actionbar,也需要考虑其高度
b = screenHeight - actionBarHeight;
t = b - iv1.getHeight();
}
iv1.layout(l, t, r, b);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
iv1.setPressed(false);
break;
}
return true;
});
}
public static DisplayMetrics getDispaly(Context context){
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return dm;
}
}
Android 在页面任意拖动View
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 上一篇讲到通过通过goolge官方的ViewDragHelper工具实现拖动的方法(上一篇见http://www....
- 需求是需要在一个已经存在的页面添加一个可拖动的浮层广告。使用到的技术:ViewDragHelper 效果如图: 封...
- 项目需求:过程中要实现能在页面中随意的拖动,刚开始实现是用悬浮球的形式进行实现,因为之前项目中用过,实现后发现用户...
- 因为赶项目本人停更两个月 从今天开始又可以更新了 今天说一下这个可随意拖动的view 简单说一下这个view效果...