BitmapShader初步认识
来源:互联网 发布:debian ubuntu 对比 编辑:程序博客网 时间:2024/06/05 22:54
参考文章链接:
自定义控件其实很简单1/3
Android BitmapShader 实战 实现圆形、圆角图片
这两天在看android中android.graphics.Paint
类的时候关注到一个方法:
/** * Set or clear the shader object. * <p /> * Pass null to clear any previous shader. * As a convenience, the parameter passed is also returned. * * @param shader May be null. the new shader to be installed in the paint * @return shader */public Shader setShader(Shader shader) { long shaderNative = 0; if (shader != null) shaderNative = shader.getNativeInstance(); native_setShader(mNativePaint, shaderNative); mShader = shader; return shader;}
它的作用呢,就是为画笔着色,现在我们先看一个着色器 BitmapShader
,它的构造方法如下:
/** * Call this to create a new shader that will draw with a bitmap. * * @param bitmap The bitmap to use inside the shader * @param tileX The tiling mode for x to draw the bitmap in. * @param tileY The tiling mode for y to draw the bitmap in. */public BitmapShader(Bitmap bitmap, TileMode tileX, TileMode tileY) { mBitmap = bitmap; mTileX = tileX; mTileY = tileY; final long b = bitmap.ni(); init(nativeCreate(b, tileX.nativeInt, tileY.nativeInt));}
构造方法中的三个参数,第一个是一个Bitmap对象,而另外两个是什么鬼?我翻了源码之后发现它是在BitmapShader类内定义的一个枚举类型,如下:
public enum TileMode { /** * 拉伸最后一排或一列像素 * replicate the edge color if the shader draws outside of its * original bounds */ CLAMP (0), /** * repeat the shader's image horizontally and vertically */ REPEAT (1), /** * repeat the shader's image horizontally and vertically, alternating * mirror images so that adjacent images always seam */ MIRROR (2); TileMode(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt;}
代码很简洁,意思也很明了,TileMode的取值有三种:
CLAMP 拉伸 这个和电脑屏保的模式应该有些不同,这个拉伸的是图片边缘的那列或一行像素
REPEAT 重复 就是横向、纵向不断重复这个bitmap
MIRROR 镜像 横向不断翻转重复,纵向不断翻转重复
那我们通过下面这张图片来实际看一下BitmapShader
的使用:
首先,我们先初始化Paint对象:
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);mPaintBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cat);mPaint.setShader(new BitmapShader(mPaintBitmap, TileMode.CLAMP, TileMode.CLAMP));
然后在onDraw方法中,用这个Paint对象画出来:
@Overrideprotected void onDraw(Canvas canvas) { canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);}
未完待续
0 0
- BitmapShader初步认识
- BitmapShader初步认识
- BitmapShader
- BitmapShader
- IBM AIX初步认识
- 指针的初步认识!
- 初步认识Struts
- ARCSDE初步认识
- ajax初步认识
- 初步认识 JSON
- 初步认识JFreeChart
- Oracel初步认识
- 初步认识Irr引擎
- Struts初步认识
- openlayers 初步认识
- JavaScript 认识初步..
- 网络爬虫初步认识
- 反射初步认识
- SVG小记——入门,clipPath
- iOS 中GET 和 POST 请求
- 实现Material风格的滑动刷新Swipe to Refresh
- Java_jdbc 基础笔记之十五 数据库连接(取得数据库自动生成的主键)
- 快速排序C++
- BitmapShader初步认识
- 微信公众平台开发教程第19篇-应用实例之人脸检测
- 冒泡排序法和选择排序法
- hdu2117二分图最大匹配
- 第八章 Fun with Forms
- [BZOJ1612][Usaco2008 Jan]Cow Contest奶牛的比赛
- Sql Server中查询今天、昨天、本周、上周、本月、上月数据
- javascript闭包
- java之十一篇:java中关于生命周期