zoukankan      html  css  js  c++  java
  • Android 涂鸦最佳实践

    Android中实现手势画图一般都两种方式,一是直接在View上绘制,而是使用SurfaceView。

    两者还是有一些差别的。简介下。

    View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面。速度较慢。 SurfaceView:基于view视图进行拓展的视图类。更适合2D游戏的开发;是view的子类,使用双缓机制。在新的线程中更新画面所以刷新界面速度比view快。所以呢,要实现涂鸦的功能优先选择后者。

    在開始码代码之前,先简单理下要实现的功能。

    1、能够自己定义画笔的颜色

    2、能够自己定义画笔的粗细

    3、能够实现各种常见形状的绘制

    4、同意画布的回退,就是回到上一步

    5、要支持橡皮擦功能

    6、已作完的画,要支持保存

    以下我们就逐步去实现这五个功能点。

    一、关于自己定义画笔的颜色和粗细。这个最简单,仅仅须调用Paint的setColor(int color)和setStrokeWidth(float width)这两个方法就可以。须要基本的是,使用SurfaceView画图须要注意是通过SurfaceHolder获得Canvas实例,这时能够通过Canvas实例去画图,绘制结束调用unlockCanvasAndPost(canvas)去提交改变。

    二、支持自由曲线、直线、矩形、圆形、实心矩形、实心圆形,非常方便的进行扩展。

    这里先抽象出一个基类Action,每一次的绘制都是一个action实例,我们的画板就是一个action的列表。这样就能非常好的支持回退功能。

    三、画布的回退。假设画布上的action列表大小不为0,表示画布眼下是支持回退的,仅仅须把列表中最后一个action给remove掉,又一次绘制就OK了

    四、橡皮擦。这里我取了个巧。画布的背景是白色的。所以橡皮擦的实现也是一个action,形状为自由曲线,颜色也为白色,这样就营造了一种被擦除的效果。事实上仅仅是被白色的曲线给遮盖住了。

    依照第三点的实现,橡皮擦也支持回退。

    五、保存画板。画布上画满了你的各种图形,最后一步就是保存了,可是View和SurfaceView的截取是不同的,View是静态的被动的,SurfaceView是主动的动态的,假设使用View的截图方法仅仅能得到一个黑屏。

    这时好办法就是把咱们保存的action列表又一次绘制出来。代码例如以下


    代码地址:https://github.com/JackCho/AndroidDoodle

    假设认为对你有所帮助,欢迎大家订阅我的微信公众账号——Android干货分享(ID:android_share)。以下是微信的二维码,为你提供及时高质的Android干货。

    技术交流QQ群:318588906,欢迎大家加群。共同探讨下Android和Java技术。一起壮大我们的微信干货分享社区。

  • 相关阅读:
    svn ------ 更改提交地址,显示relocate
    .NET ------ 前端连接到新的界面与后台链接到新的界面
    .NET ------ 修改时间改变排序
    .NET ------ 通过flag 实现一表多用
    Java面向对象——抽象类与抽象方法
    Java——final关键字
    Java——类的成员之4:代码块(初始化块)
    Java——main方法的使用
    单例(Singleton)设计模式
    Java面向对象——static关键字
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5193563.html
Copyright © 2011-2022 走看看