沐诗羽 2021-08-02 18:06 采纳率: 27.3%
浏览 206
已结题

安卓节目编辑功能有没有人推荐一下?

最近公司有个界面编辑功能的需求:
1.在一个界面有个父布局,可以动态往里面添加图片视频等子控件
2.内部的所有子控件都可以点击选中缩放拖拽
3.子控件内部的内容可以随时替换,也可同时添加多个轮询显示

img

  • 写回答

1条回答 默认 最新

  • 王大师王文峰 企业官方账号 2021-08-03 14:02
    关注

    下面代码可以实现,望采纳一下,谢谢
    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不会被拖动
    }
    

    }

    评论

报告相同问题?

问题事件

  • 系统已结题 8月10日
  • 修改了问题 8月3日
  • 创建了问题 8月2日

悬赏问题

  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题
  • ¥15 keil L6007U报错
  • ¥15 webapi 发布到iis后无法访问
  • ¥15 初学者如何快速上手学习stm32?
  • ¥15 如何自动更换布娃娃图片上的衣服
  • ¥15 心理学eprime编程