欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作

程序员文章站 2022-04-09 18:33:39
"Android项目刮刮奖详解(四)" 前言 我们已经成功实现了刮刮奖的功能了,本期是扩展篇,我们把这个View直接定义成开源控件,发布到JitPack上,以后有需要也可以直接使用,关于自定义控件的知识,不了解的同学可以看这下面我之前写的这两篇 "Android 自定义控件" "Android开发— ......

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
我们按照文档上的方法,导入依赖,使用即可

Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作

番外——做个美女脱衣

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

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

Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作

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

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

激动时刻————

Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作

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