Android 绘图学习

1GradientDrawable 简介

以前的文章写过 Android中渐变实现方式

前面的文章 讲解了如何实现渐变类似LinearGradient,SweepGradient是用于Paint的setShader的,可以通过定义xml的shape,内部利用gradient标签,将shape作为view的背景快速实现渐变。但当我们需要动态修改时,就需要用到GradientDrawable,它和xml方式对应,可以快速生成可以作为view背景的渐变drawable。

构造函数:

两种生成方式:

public GradientDrawable() ;

/**

* Create a new gradient drawable given an orientation and an array

* of colors for the gradient.

*/

public GradientDrawable(Orientation orientation, @ColorInt int[] colors) ;

参数说明:

Orientation:渐变方向,我们知道xml方式的渐变的方向的控制主要利用角度, 渐变的方向 默认为0 从做向右 ,90时从下向上 必须为45的整数倍。

Orientation方向定义如下,很简单就不翻译中文了。

public enum Orientation {

/** draw the gradient from the top to the bottom */

TOP_BOTTOM,

/** draw the gradient from the top-right to the bottom-left */

TR_BL,

/** draw the gradient from the right to the left */

RIGHT_LEFT,

/** draw the gradient from the bottom-right to the top-left */

BR_TL,

/** draw the gradient from the bottom to the top */

BOTTOM_TOP,

/** draw the gradient from the bottom-left to the top-right */

BL_TR,

/** draw the gradient from the left to the right */

LEFT_RIGHT,

/** draw the gradient from the top-left to the bottom-right */

TL_BR,

}

colors:渐变的颜色数组。

2 xml实现渐变

android:angle="0"

android:endColor="#FFC54E"

android:startColor="#FF9326"

android:type="linear" />

android:bottomLeftRadius="25dp"

android:bottomRightRadius="25dp"

android:topLeftRadius="25dp"

android:topRightRadius="25dp" />

3GradientDrawable 实现渐变

**setCornerRadii(): **设置shape的圆角,大小为8(可以大于8),共四对参数,分别表示top-left, top-right, bottom-right, bottom-left的圆角。

setCornerRadius(roundRadius): 设置圆角,四个圆角大小相同。

setColor(fillColor): 设置填充色,此时会使用设置的颜色,而不会使用渐变色

setStroke(strokeWidth, strokeColor): 设置边框宽度和颜色

setGradientType(GradientDrawable.RECTANGLE): 设置渐变形状,包括RECTANT,OVAL,LINE,RING

setGradientCenter(float x, float y): 渐变中心坐标

setOrientation(GradientDrawable.Orientation orientation):设置渐变方向,包括从上到下,从左到右,从下到上,从右到左

setColors(int[] colors):设置渐变的颜色数组

inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Resources.Theme theme)

从xml文件中加载得到drawable

实例代码:

tv = findViewById(R.id.tv);

int[] colors = {0xFFFF9326,0xFFFFC54E};

GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,colors);

drawable.setCornerRadius(25);

drawable.setGradientType(GradientDrawable.RECTANGLE);

tv.setBackground(drawable);

android 动态渐变,Android 动态修改渐变 GradientDrawable相关推荐

  1. 【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )

    文章目录 一.注入本质 二.静态注入和动态注入 三.静态注入两种方式 ( 修改动态库重打包 | 修改 /data/app/packageName/libs/ 下的动态库 ) 一.注入本质 进程注入本质 ...

  2. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system )

    文章目录 一.运行环境搭建 Android 模拟器安装 二.拷贝 Android 平台可执行文件和动态库到 /data/system 目录下 一.运行环境搭建 Android 模拟器安装 使用低版本的 ...

  3. 【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )

    文章目录 一.应用结构分析 二.定位动态库位置 三.定位动态库中的修改点 四.修改动态库 五.重打包 一.应用结构分析 分析上一篇博客 [Android 逆向]逆向修改游戏应用 ( APK 解析工具 ...

  4. android开发步步为营之90:android图片处理技术之三(Gradient渐变图片的绘制)

    我想大家在开发的时候,经常会看到UED会设计渐变颜色的产品需求,当然如果图片不需要动态更换,直接使用UED设计的渐变色的图片就可以了,但是很多时候,像我们最近项目里面,就有根据不同的皮肤,渐变色是不一 ...

  5. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...

  6. 【Android 逆向】Android 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )

    文章目录 一.Android 逆向方法 1.静态逆向解析 2.函数调用分析 3.动态运行跟踪 4.运行日志分析 5.文件格式解析 6.敏感信息分析 7.网络信息监控 8.软件动态调试 9.环境伪装模拟 ...

  7. 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )

    文章目录 安卓直播推流专栏博客总结 一. Camera 传感器方向简介 二. Camera 图像传感器横向显示数据 三. Camera 图像传感器纵向显示数据 四. 设置 Camera 预览数据方向 ...

  8. 020 Android之so文件动态调试

    文章目录 ELF文件格式查看工具 so文件加载时的函数执行顺序 so文件动态调试 so文件调试技巧 使用ida动态调试的那些坑 进程显示不全 illegal segment bitness more ...

  9. android fragment动态加载,动态添加Fragment

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 动态添加Fragment 在程序运行时, 根据具体情况来动态地添加Fragment到Activity中. 1 新建 An ...

最新文章

  1. Code爱好者必去的20个网站(开源项目托管网站)
  2. linux偏向swap,solaris/linux 增加swap交换空间的方法
  3. [hdu5225][BC#40]Tom and permutation
  4. Guice系列之用户指南(五)
  5. 通用业务平台设计(一):概览
  6. 【译】Simple MySQL ORM for C
  7. 怎么获取股票大数据接口的方法介绍
  8. 算法快学笔记(一):算法入门
  9. mac 电脑 打开隐藏文件
  10. 永恒之黑(CVE-2020-0796 微软SMBv3协议远程代码执行漏洞)
  11. 数据库管理员、系统分析员、数据库设计人员,应用程序员的职责是什么?
  12. java 模板类 mock_mockj: 生成mock数据的利器,按照规则模板生成 mock 数据,mockjs的java实现。同时内置随机 random 一个对象的功能...
  13. 赛尔号桌面版_赛尔号电脑版下载 赛尔号电脑版下载
  14. svn多分支合并主干冲突 svn Working copy and merge source not ready for reintegration
  15. 山东大学中外合作计算机专业,山东大学威海分校计算机专业
  16. STM32F407 SPI SD卡驱动的验证
  17. JavaScript基础——第五章,jQuery与JavaScript
  18. 江苏大学 计算机网络 期末/考研复试 复习
  19. 3D 渲染软件市场增长迅速的原因
  20. canvas.drawArc

热门文章

  1. 修改Opera浏览器主页搜索引擎
  2. JVM总结之垃圾回收
  3. 大数据项目实践过程笔记
  4. c语言读png图片非隔行扫描,北京大学计算概论C语言经典课件Lecture4信息显示与多媒体技术.ppt...
  5. 支付API接口(支付宝支付接口微信支付接口)
  6. 硬盘分区修复和碎片整理命令
  7. 函数栈帧(详细图解)
  8. C++重点之“引用变量”用法
  9. c语言程序设计高速公路超速处罚,高速超速违章处理流程
  10. os.path.abspath和os.path.realpath区别