Android项目刮刮奖详解(四)

前言

我们已经成功实现了刮刮奖的功能了,本期是扩展篇,我们把这个View直接定义成开源控件,发布到JitPack上,以后有需要也可以直接使用,关于自定义控件的知识,不了解的同学可以看这下面我之前写的这两篇

Android 自定义控件

Android开发——发布第三方库到JitPack上

实现

  1. 定义属性

    • text 文字内容
    • textColor 文字颜色
    • textSize 文字大小
    • paintSize 擦除效果的宽度
    • messageBackground 中奖图片
    • cover 遮盖层图片或遮盖层颜色
    • isDrawText 显示文字或者是图片,默认显示文字
    • clearFlag 达到多少阈值清除遮盖层,默认60

    按照之前那一篇自定义控件来操作,我们建立个atts.xml,在其中定义属性,这里,我们可以将中奖图片和信息层颜色合为一项,遮盖层图片和遮盖层颜色合为一项

     <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <declare-styleable name="GuaJiangView">
    <attr name="text" format="string"/>
    <attr name="textColor" format="color"/>
    <attr name="textSize" format="integer"/>
    <attr name="messageBackground" format="color|reference"/>
    <attr name="cover" format="color|reference"/>
    <attr name="PaintSize" format="integer"/>
    <attr name="isDrawText" format="boolean"/>
    <attr name="clearFlag" format="integer"/>
    </declare-styleable>
    </resources>
  2. 获得我们定义的属性

     TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.GuaJiangView);
    text = ta.getString(R.styleable.GuaJiangView_text);
    textColor = ta.getColor(R.styleable.GuaJiangView_textColor,0);
    textSize = ta.getInteger(R.styleable.GuaJiangView_textSize,16);
    coverDrawable = ta.getDrawable(R.styleable.GuaJiangView_cover);
    isDrawText = ta.getBoolean(R.styleable.GuaJiangView_isDrawText,true);
    clearFlag = ta.getInteger(R.styleable.GuaJiangView_clearFlag,60);
    if (!isDrawText){
    backgroundDrawable = ta.getDrawable(R.styleable.GuaJiangView_messageBackground);
    }
    paintSize = ta.getInteger(R.styleable.GuaJiangView_PaintSize,10);
    ta.recycle();

    这里加了个判断,当用户选择只写中奖信息,我们可以屏蔽掉获取信息层的图片设置,防止出错

  3. 修改之前的项目代码

    开源库,自然是不能像之前项目那般写的那么凌乱,自然是得写上厚厚的注释,将代码重构优化一下,还得考虑到相关的逻辑

    这里提一下,attrs中可以使用\|来使该属性接收两个属性,最常用的还是背景颜色和背景图片合成一项,例如上面定义的attr中的背景

     <attr name="messageBackground" format="color|reference"/>

    我们可以通过下面的方法来对这样的属性使用,获得之后转换为bitmap

     /**
    * drawable转换为bitmap
    * @param drawable 需要转换的drawble
    * @param width 宽
    * @param height 高
    * @return 返回bitmap
    */
    public Bitmap drawableToBitmap(Drawable drawable, int width, int height) { if (drawable instanceof BitmapDrawable) {
    return ((BitmapDrawable) drawable).getBitmap();
    }
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);
    return bitmap;
    }

    其实drawable 它本身有一个 draw方法, 只要我们调用setBounds设置范围, 在调用draw方法就可以直接画了,上面的drawable其实已经包含有颜色了,所以我们直接调用draw方法即可在画出一个纯颜色的bitmap

    简单地观察,这里与会之前的mCanvas是一样的。

    以新建的bitmap作为画板,之后drawable在canvas上作画(实际上是画在了bitmap),之后我们返回这个bitmap使用即可

    其他地与之前差不多,大家自己琢磨琢磨吧,最后我会发出完整代码的

  4. 上传github以及JitPack

    这里将不多说什么了,我这两篇写的很清楚了

  5. 简单的测试使用

GuaJiangViewDemo

我们按照文档上的方法,导入依赖,使用即可

番外——做个美女脱衣

本来想单独出来写一篇的,不过,发现也没有什么新的代码要写,我们直接拿开源库来用即可(需要美女穿衣和脱衣的衣服哦~)

我就准备了二次元少女的衣服,将两张图片放到drawable文件夹之中,我们就可以开始工作了

弄好之后,我的android Studio竟然卡死了?!

什么鬼!!好在重启一下软件就好了

激动时刻————

哈哈,成功,刮刮卡项目的详解就到此结束啦~

Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作的更多相关文章

  1. Android项目刮刮奖详解(二)

    Android项目刮刮奖详解(一) 前言 上期我们简单地实现了一个画板的功能,用户可以在上面乱写乱画,其实,刮刮奖也是如此,用户刮奖的时候也是乱写乱画的. 刮刮奖原理 一共有两层画布,底层画布存放中奖 ...

  2. Android项目刮刮奖详解(三)

    Android项目刮刮奖详解(二) 前言 上一期我们已经实现了一个简易的刮刮卡功能,这一期我们来将其完善一下 目标 将刮刮奖的宽高改为合适高度 将刮刮奖位置居中 将信息层的图片换成文字(重点) 实现 ...

  3. Android项目刮刮奖详解(四)

    Android项目刮刮奖详解(三) 前言 上一期我们已经是完成了刮刮卡的基本功能,本期就是给我们的项目增加个功能以及美化一番 目标 增加功能 用户刮卡刮到一定程度的时候,清除遮盖层 在遮盖层放张图片, ...

  4. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  5. Android 之窗口小部件详解(三)  部分转载

    原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...

  6. Android Gradle manifestPlaceholders 占位符详解

    Android Gradle manifestPlaceholders 占位符详解 在实际项目中,AndroidManifest里十几个地方的值是需要动态的改变(生成apk文件的时候).如果每次去改也 ...

  7. Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

    Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...

  8. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  9. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

随机推荐

  1. JavaScript / 本地存储

    cookie 首先让我们先了解一下,什么是cookie,cookie是浏览器提供的一种机制,他将document.cookie的接口提供给JavaScript使其可以对cookie进行控制,但cook ...

  2. 一个帮助理解python星号的例子

  3. gradle环境变量设置_配置注意事项

    看<Spring源码深度解析>的时候,在windows7系统中按照书里配置gradle环境变量,配置完后输入gradle -v,一直显示:'gradle'不是内部或外部命令,也不是可执行的 ...

  4. 全面盘点当前Android后台保活方案的真实运行效果(截止2019年前)

    本文原作者“minminaya”,作者网站:minminaya.cn,为了提升文章品质,即时通讯网对内容作了幅修订和改动,感谢原作者. 1.引言 对于IM应用和消息推送服务的开发者来说,在Androi ...

  5. apache(OS 10013)以一种访问权限不允许的方式做了一个访问套接字的尝试 ...

    今天启动Apache时, 报了“(OS 10013)以一种访问权限不允许的方式做了一个访问套接字的尝试. : make_sock: could not bind to address 0.0.0.0: ...

  6. Vue.js 动画

    transition 动画: 当插入或删除包含在 transition 组件中的元素时,Vue将会做以下处理:     1.自动嗅探目标元素是否应用了css过滤或动画,如果是,在恰当的时机添加/删除c ...

  7. Java连接数据库之SQLServer

    工具: eclipse Microsoft SQL Server SQL Server连接驱动:mssql-jdbc-6.4.0.jre8.jar SQL script代码 CREATE DATABA ...

  8. Cassandra如何利用线性一致性来实现轻量级的事务

    分布式数据库会面临着一个独特的挑战,就是数据必须要严格的按照读,写顺序执行.如创建用户,转账,两个潜在的写操作竞态条件必须要确保一个写操作必须在另外一个之前发生.在Cassandra中,使用Paxos ...

  9. Linux查找文件内容

    从当前目录递归查找文件名为 .py 中包含 conf 的文件名: find -name "*.py" | xargs grep "conf"

  10. 【Spark篇】---Spark中广播变量和累加器

    一.前述 Spark中因为算子中的真正逻辑是发送到Executor中去运行的,所以当Executor中需要引用外部变量时,需要使用广播变量. 累机器相当于统筹大变量,常用于计数,统计. 二.具体原理 ...