Android中提供了Shader类专门用来渲染图像以及一些几何图形,Shader下面包括几个直接子类,分别是BitmapShader、 ComposeShader、LinearGradient、RadialGradient、SweepGradient。 BitmapShader主要用来渲染图像,LinearGradient 用来进行梯度渲染,RadialGradient 用来进行环形渲染,SweepGradient 用来进行梯度渲染,ComposeShader则是一个 混合渲染,可以和其它几个子类组合起来使用。
Shader类的使用,都需要先构建Shader对象,然后通过Paint的setShader方法设置渲染对象,然后设置渲染对象,然后再绘制时使用这个Paint对象即可。当然,用不同的渲染时需要构建不同的对象。 下面是一个简单的示例,其实用起来比较简单了 只是方法参数比较多。但是还比较容易理解。大家可以去翻翻API 这里就不深入讨论了,以后用到再说吧。
ShapeDrawable继承自Drawable是可以绘制图像的类。在绘制图像时可以给其设置图形(如下面的运行时图的显示效果)。
1. 获得图像资源
mBitmap = ((BitmapDrawable)getResources()
// .getDrawable(R.drawable.wall))
.getDrawable(R.drawable.gui_lun_mei))
.getBitmap();
2. Shape对象,ShapeDrawable对象,对ShapeDrawable对象进行设置
/*构建ShapeDrawable对象并且定义形状为椭圆*/
mShapDrawable = new ShapeDrawable(new OvalShape());
/*创建BitmapShader对象-----效果渲染*/
mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT, Shader.TileMode.MIRROR);
/*设置Shader对象*/
mShapDrawable.getPaint().setShader(mBitmapShader);
/*设置显示区域*/
mShapDrawable.setBounds(50,50,50 + mBitmapWidth,50 + mBitmapHeight);
3. 绘制图像
/*绘制*/
mShapDrawable.draw(canvas);
效果
//线性渐变熏染
mLinearGradient = new LinearGradient(0, 0, 200, 300,
new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.WHITE} , null,
Shader.TileMode.REPEAT);
//初始化画笔
mPaint = new Paint();
//绘制一个渐变的矩形
mPaint.setShader(mLinearGradient);
canvas.drawRect(mBitmapWidth,0,320,mBitmapHeight, mPaint);
//混合渲染
mComposeGradient = new ComposeShader(mBitmapShader, mLinearGradient, PorterDuff.Mode.DARKEN);
//绘制混合渲染
mPaint.setShader(mComposeGradient);
canvas.drawRect(0, mBitmapHeight, mBitmapWidth, mBitmapHeight + 400, mPaint);
//RadialGradient 环形渐变效果
mRadialGradient = new RadialGradient(200, 200, 50,
new int[]{Color.GREEN,Color.RED,Color.BLUE,Color.WHITE},
null, Shader.TileMode.REPEAT);
mPaint.setShader(mRadialGradient);
canvas.drawCircle(200, 200, 80, mPaint);
//SweepGradient梯形渐变
mSweepGradient = new SweepGradient(250, 250, new int[]{
Color.GREEN,Color.RED,Color.BLUE,Color.WHITE
}, null);
mPaint.setShader(mSweepGradient);
canvas.drawRect(200, 200, 300, 300, mPaint);