A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大山哥哥 于 2016-10-31 22:33 编辑

最近给学生用真机演示demo的时候,学生不能很好的看到手指活动的区域。正好发现Android在api18之后提供了一个ViewOverlay可以很容易的,在现有的视图上绘制内容。所以用ViewOverlay实现了一个可以根据手指轨迹画方框的demo。以供大家一块学习。下面上图:


实现起来也很简单,就是给整个布局设置触摸监听,在触摸事件中计算方框,并添加给ViewOverlay.
[AppleScript] 纯文本查看 复制代码
/*
     * 触摸事件处理
     */
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int x = (int) event.getX();
        int y = (int) event.getY();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Drawable current = markerAt(x, y);
                if (current == null) {
                    mTrackingMarker = addBox(v, x, y);
                    mTrackingPoint = new Point(x, y);
                } else {
                    //移除前面的方框
                    removeMarker(v, current);
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (mTrackingMarker != null) {
                    resizeBox(v, mTrackingMarker, mTrackingPoint, x, y);
                }
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                mTrackingMarker = null;
                mTrackingPoint = null;
                break;
        }
        return true;
    }


1. 在DOWN事件中,我们先判断是否添加了这个红框的drawable。如果没有把他创建出来并添加到Overlay中。
2. 在MOVE事件中,给边红框的大小
[AppleScript] 纯文本查看 复制代码
/*
     * 更新已经存在的方框
     */
    private void resizeBox(View v, Drawable target, Point trackingPoint, int x, int y) {
        Rect bounds = new Rect(target.getBounds());
        //如果触摸点在已经存在的点的左边更新左边位置
        //else说明在右边,更新右边的位置
        if (x < trackingPoint.x) {
            bounds.left = x;
        } else {
            bounds.right = x;
        }

        //如果新的触摸点在已经存在点的上边,更新上边的位置
        //else更新下边的位置
        if (y < trackingPoint.y) {
            bounds.top = y;
        } else {
            bounds.bottom = y;
        }

        //更新方框的边框
        target.setBounds(bounds);
        v.invalidate();
    }


到此,我们就可以在屏幕上自由的画区域的标示红框了。

下面上源码

ViewOverlay.zip

94.08 KB, 下载次数: 73

3 个回复

倒序浏览

回帖奖励 +2

对我来说还是太高深了~~!
回复 使用道具 举报
虽然看不懂,但是感觉还是很高大上
回复 使用道具 举报
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马