android中如何通过手指在屏幕上滑动来动态画出一条直线?

作者:超级管理员 更新时间:2017-09-12 16:56:18 来源:未知 点击:15642
初来乍到,这个问题之前在技术问答区发过一次,但那里好像不能回复别人的回答,所以还是再发一遍帖子,望大家帮帮忙。如题,我现在想要实现的效果是,手指在屏幕上滑动时能拖出一条从action down位置到手
初来乍到,这个问题之前在技术问答区发过一次,但那里好像不能回复别人的回答,所以还是再发一遍帖子,望大家帮帮忙。
如题,我现在想要实现的效果是,手指在屏幕上滑动时能拖出一条从action down位置到手指当前位置的连线,在手指离开屏幕前,手指变化位置时直线终点跟着改变而起点始终保持为初始action down的位置,从而实现直线跟随手指变化长短和方向的效果,而当手指action up时,就在屏幕上显示action down到action up位置的一条连线。
请教各位熟悉android的朋友,上述效果应该怎么实现?有做过类似效果的帮忙提供一下demo和讲解一下思路吧,感激不尽~
-------------------------------
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint=new Paint();
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(5);

        canvas.drawLine(startX,startY,endX,endY,paint);
    }

    float startX = 0;
    float startY = 0;

    float endX = 0;
    float endY = 0;

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startX = event.getX();
                startY = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                endX = event.getX();
                endY = event.getY();
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        return true;
    }
-------------------------------
引用 1 楼 qq_28934205 的回复:
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint=new Paint();
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(5);

        canvas.drawLine(startX,startY,endX,endY,paint);
    }

    float startX = 0;
    float startY = 0;

    float endX = 0;
    float endY = 0;

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startX = event.getX();
                startY = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                endX = event.getX();
                endY = event.getY();
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        return true;
    }


谢谢你,上述代码可以保持直线为跟随状态,看来之前是我想复杂了,顺便追问一下,再次触摸屏幕时,之前的画线就消失了,该怎么保留之前的画线?
-------------------------------
把数据保存起来就可以了

  @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint=new Paint();
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(5);

        canvas.drawLine(startX,startY,endX,endY,paint);
        for (int i = 0; i < list.size(); i++) {
            float [] data=list.get(i);
            canvas.drawLine(data[0],data[1],data[2],data[3],paint);
        }
    }

    float startX = 0;
    float startY = 0;

    float endX = 0;
    float endY = 0;

    ArrayList<float[]> list=new ArrayList<>();

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startX = event.getX();
                startY = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                endX = event.getX();
                endY = event.getY();
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                float [] data={startX,startY,endX,endY};
                list.add(data);

                break;
        }

        return true;

    }
-------------------------------
引用 3 楼 qq_28934205 的回复:
把数据保存起来就可以了

  @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint=new Paint();
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(5);

        canvas.drawLine(startX,startY,endX,endY,paint);
        for (int i = 0; i < list.size(); i++) {
            float [] data=list.get(i);
            canvas.drawLine(data[0],data[1],data[2],data[3],paint);
        }
    }

    float startX = 0;
    float startY = 0;

    float endX = 0;
    float endY = 0;

    ArrayList<float[]> list=new ArrayList<>();

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startX = event.getX();
                startY = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                endX = event.getX();
                endY = event.getY();
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                float [] data={startX,startY,endX,endY};
                list.add(data);

                break;
        }

        return true;

    }

多谢

推荐阅读

热门内容

安卓开发新手 请问fix gradle

刚刚安装好android studio,...

关于SQLite数据插入

我做了一个界面界面想把数据插入到SQLi...

执行命令 npm install -g

最近需要更新react-native的版...

layout_width="0dp"设置

android:layout_width...

安装adroid studio时出现这种

请问一下,安装adroid studio...

如何实现悬浮状态栏(scrollview

最近公司有个新需求,但不知从何下手,向大...

请教一个sqlite乱码的问题

我有一个txt文件已经是utf-8格式的...

有哪位大神知道怎样在Fragment里做

本帖最后由qq_37840482于201...

android授权微信多处编译debug

android授权微信同样的代码,同样的...

关于共享参数sharedpreferen

        SharedPrefer...

最新内容

性能测试计划(完整版)

软件大小:460KB资源类型:不详授权方式:免费/开源资料   主要内容:   ...

TestLink 的使用详解

  一、初始配置(设置用户、产品)  1、用户设置  在TestLink系统中,...

测试用例设计进阶(上)

  判定表法设计测试用例—判定表相关概念  判定表  是分析和表达多逻辑条件下执...

我所理解的性能测试中负载测试与压力测试的区别

  性能测试中负载测试,压力测试有什么区别  对于性能测试,负载测试,压力测试的...

android中如何通过手指在屏幕上滑动来动态画出一条直线?

初来乍到,这个问题之前在技术问答区发过一次,但那里好像不能回复别人的回答,所以还...

关于如何进行网页版测试的工作总结

  我想大多数开始进行web端页面测试的人,一开始会的都是在页面上点点点,然后一...

网站可以通过哪些流程优化

    一家企业想要在互联网方面得到提升,就一定要将企业的网站做好,而一个成功的...

如何超越竞争对的营销型网站排名

    网站的竞争对手和其他的营销对手一样,一般就是指同行业的与你提供相同或相似...

分享给网站引流的几个方法

1、SEO通过seo优化的方法,让自己的网站在百度,在搜狐,在360等搜索引擎排...

网站顶部导航在网站中有哪些重要性

    网站就是一个企业与互联网连接的最好的平台,企业想要让网站在互联网中受网民...

推广方法50条

推广方式万变不离其宗,任何一个平台都如此,100种推广方式只需知道即可,把一个做...

站长经验说说之做企业站SEOer应该考虑的两个问题

随着http://www.yixiin.com/sitemap/index-ht...

站长说说交流之离别的友情,思念的距离

终于到http://www.yixiin.com/quote/了分别的时分了,我...

即使自己不会整合资源,我们可以看看别人的写作思路呀

  随着互联网环境的发展,通过我们网站的关键词进行排名越来越难,从生活到社会,我...

魅蓝6真机微博曝光 配置稳定外观有亮点

    中关村在线消息:去年10月底,魅族在北京发布了魅蓝5,定位百元机市场。标...

暗藏AR玄机 vivo X20发布会邀请函曝光

    昨天,vivo官方公布了X20全面屏手机发布会邀请函,正式宣布vivo ...

华硕Zenfone 4 Max美国上市 超长续航

    中关村在线消息:今年7月华硕Zenfone 4 Max在俄罗斯发布,价格...

苹果新机发布 今年你买?还是不买?

    苹果新品马上要发布了,好多人除了观望之外,其实还有很多纠结的内心戏,有快...

安卓开发新手 请问fix gradle wrapper and reimport project如何解决

刚刚安装好android studio,新建的一个项目,新建完报错,如下图,,然...

测试工程师如何薪资过万

  一提到软件测试工程师,很多人就会想到那些反复使用软件,试图在频繁操作中寻找到...