服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android UI效果之绘图篇(三)

Android UI效果之绘图篇(三)

2021-06-15 17:47Android开发网 Android

这篇文章主要介绍了Android UI效果之绘图篇,针对Android开发中的UI效果设计模块进行讲解,感兴趣的小伙伴们可以参考一下

一、 porterduffxfermode

porterduffxfermode类似于数据集合里面的交集并集概念,只是数据里面取的是两个集合,而我们这里取的是两个图形之间的交集并集,我们先来看一张android api demo里面一张金典的图

Android UI效果之绘图篇(三)

图中的src和dst相当于是数学中的两个集合,而在我们的代码中我们可以这样来操作这两个集合

?
1
2
3
canvas.drawsrc();
paint.setxfermode(new porterduffxfermode(porterduff.mode.xxx));
canvas.drawdst();

只需要更具我们的需要设置不同的mode即可,从此以后,圆角矩形什么的,那都不是事儿!

二、shader

shader字面意思是着色器、渲染器,有五个子类分别是:

  • bitmapshader
  • lineargradient
  • radialgradient
  • sweepgradient
  • composeshader

1、bitmapshader:位图渲染,顾名思义,使用bitmapshader可以对位图进行一些着色渲染操作
构造方法如下

?
1
2
3
4
5
6
/**
* @param bitmap 需要渲染的位图
* @param tilex x方向渲染模式
* @param tiley y方向渲染模式.
*/
public bitmapshader(bitmap bitmap, tilemode tilex, tilemode tiley)

第一个参数不用多说,第二个和第三个渲染模式tilemode有三个可选项
①. clamp:当bitmap比要绘制的图形小时拉伸位图的最后一个像素;当bitmap比要绘制的图形大时,根据绘制图形剪裁bitmap

?
1
2
3
bitmapshader bitmapshader = new bitmapshader(bitmap, shader.tilemode.clamp, shader.tilemode.clamp);
paint.setshader(bitmapshader);
canvas.drawrect(0, 0, bitmap.getwidth() * 2, bitmap.getheight() * 2, paint);

Android UI效果之绘图篇(三)

?
1
2
3
4
bitmapshader bitmapshader = new bitmapshader(bitmap, shader.tilemode.clamp, shader.tilemode.clamp);
paint.setshader(bitmapshader);
rectf rect = new rectf(100, 100, 300, 300);
canvas.drawroundrect(rect, 30, 30,paint);

Android UI效果之绘图篇(三)

②. repeat :当bitmap比要绘制的图形小时横向纵向不断重复bitmap;当bitmap比要绘制的图形大时,根据绘制图形剪裁bitmap

bitmapshader bitmapshader = new bitmapshader(bitmap, shader.tilemode.repeat, shader.tilemode.repeat);
paint.setshader(bitmapshader);
canvas.drawrect(0, 0, bitmap.getwidth() *2, bitmap.getheight() * 2, paint);

Android UI效果之绘图篇(三)

③. mirror :和repeat 类似,当bitmap比要绘制的图形小时横向纵向不断重复bitmap,不同的是相邻的两个bitmap互为镜像

?
1
2
3
bitmapshader bitmapshader = new bitmapshader(bitmap, shader.tilemode.mirror, shader.tilemode.mirror);
paint.setshader(bitmapshader);
canvas.drawrect(0, 0, bitmap.getwidth() * 4, bitmap.getheight() * 4, paint);

Android UI效果之绘图篇(三)

熟悉bitmapshader之后,圆角图片、圆形头像什么的就更easy了

1.lineargradient 线性渐变
先来看下它的构造方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * 创建一个lineargradient
 @param x0 起始x坐标
 @param y0 起始y坐标
 @param x1 结束x坐标
 @param y1 结束y坐标
 @param color0 起始颜色值
 @param color1 结束颜色值
 @param tile shader的mode
 */
 public lineargradient(float x0, float y0, float x1, float y1, int color0, int color1,tilemode tile)
 
lineargradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, shader.tilemode tile)

两个构造方法类似,第二个只是可以添加更多颜色,把颜色值封装到了数组colors中,其后的positions是与之colors对于的颜色的比例,如果为null,颜色值则平均分布。
lineargradient和bitmapshader一样有三个tilemode可选clamp、repeat、mirror。实现的效果如下:
① clamp

lineargradient lg = new lineargradient(0, 0, 300, 300, 0xffff0000, 0xff0000ff, shader.tilemode.clamp);
paint.setshader(lg);
canvas.drawrect(0, 0, canvas.getwidth(), canvas.getheight(), paint);

Android UI效果之绘图篇(三)

② repeat

?
1
2
3
lineargradient lg = new lineargradient(0, 0, 300, 300, 0xffff0000, 0xff0000ff, shader.tilemode.repeat);
paint.setshader(lg);
canvas.drawrect(0, 0, canvas.getwidth(), canvas.getheight(), paint);

Android UI效果之绘图篇(三)

③ mirror

?
1
2
3
lineargradient lg = new lineargradient(0, 0, 300, 300, 0xffff0000, 0xff0000ff, shader.tilemode.mirror);
paint.setshader(lg);
canvas.drawrect(0, 0, canvas.getwidth(), canvas.getheight(), paint);

Android UI效果之绘图篇(三)

还有三个shader没有介绍,感觉篇幅有点长了,留到下一篇再给大家讲解,希望大家继续关注。

延伸 · 阅读

精彩推荐
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6192021-03-27
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9602022-03-02
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7452021-03-11
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4672021-01-03
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8342021-03-31
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4642021-03-09
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810052021-05-03