最近公司有个界面编辑功能的需求:
1.在一个界面有个父布局,可以动态往里面添加图片视频等子控件
2.内部的所有子控件都可以点击选中缩放拖拽
3.子控件内部的内容可以随时替换,也可同时添加多个轮询显示
安卓节目编辑功能有没有人推荐一下?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 下面代码可以实现,望采纳一下,谢谢
private int lastX = 0;
private int lastY = 0; //手指在屏幕上的坐标private boolean isDraged = false; //View是否被移动过
private boolean isDrag = false; //判断是拖动还是点击
private class DragViewOnTouchListener implements OnTouchListener{@Override public boolean onTouch(View v, MotionEvent event) { int parentRight = ((ViewGroup)v.getParent()).getWidth(); int parentBottom = ((ViewGroup)v.getParent()).getHeight(); int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: isDrag = false; isDraged = false; lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX()-lastX; int dy = (int) event.getRawY()-lastY; //手指在屏幕上移动的距离 if (isDraged){ isDrag = true; //如果已经被拖动过,那么无论本次移动的距离是否为零,都判定本次事件为拖动事件 }else{ if (dx == 0 && dy == 0){ isDraged = false; //如果移动的距离为零,则认为控件没有被拖动过,灵敏度可以自己控制 }else{ isDraged = true; isDrag = true; } } int l = v.getLeft()+dx; int b = v.getBottom()+dy; int r = v.getRight()+dx; int t = v.getTop()+dy; if(l < 0){//处理按钮被移动到父布局的上下左右四个边缘时的情况,防止控件被拖出父布局 l = 0; r = l + v.getWidth(); } if(t < 0){ t = 0; b = t + v.getHeight(); } if(r > parentRight){ r = parentRight; l = r - v.getWidth(); } if(b > parentBottom){ b = parentBottom; t = b - v.getHeight(); } lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); v.layout(l, t, r, b); v.postInvalidate(); //其他view刷新时,会导致view回到原点,可以用设置LayoutParams的方式代替 break; } return isDrag; //如果没有给view设置点击事件,需返回true,否则不会响应ACTION_MOVE,导致view不会被拖动 }
}
解决评论 打赏 举报无用 1
悬赏问题
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大