( 2 ) 位图渲染 REPEAT 拉伸 代码示例 及 效果 ( 绘制超出图片边界时, 就会绘制 同样的图片 填充剩余部分 )
REPEAT 拉伸 :
1.REPEAT 说明 : 在创建 BitmapShader 的时候, 设置其 水平 和 垂直方向的 拉伸方式为 Shader.TileMode.REPEAT , 则在绘制超出图片边界时, 就会绘制 同样的图片 填充剩余部分 ;
2.展示效果 :
2.代码示例 :
package com.hanshuliang.shader.widget; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; import com.hanshuliang.shader.R; public class PaintBitmapShaderRepeat extends View { public PaintBitmapShaderRepeat(Context context) { super(context); } public PaintBitmapShaderRepeat(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public PaintBitmapShaderRepeat(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.WHITE); Paint mPaint = new Paint(); Bitmap mBitmap = ((BitmapDrawable)getResources(). getDrawable(R.mipmap.aodesai)).getBitmap(); //1. 创建位图渲染对象, 并设置拉伸方式, 此处设置Shader.TileMode.CLAMP, // 如果绘制的位置超出了图像的边界, 使用平铺方式填充 BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); //2. 设置渲染到 Paint 对象 mPaint.setShader(bitmapShader); //3. 打开抗锯齿 mPaint.setAntiAlias(true); //4. 绘制指定的矩形区域 canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint); } }
( 3 ) 位图渲染 MIRROR 拉伸 代码示例 及 效果 ( 在垂直和水平方向绘制图片的对应方向的反向图片 )
MIRROR 拉伸 :
1.MIRROR 说明 : 在创建 BitmapShader 的时候, 设置其 水平 和 垂直方向的 拉伸方式为 Shader.TileMode.MIRROR , 则在绘制超出图片边界时, 就会绘制 图片的 镜像翻转方式 铺满剩余部分;
2.展示效果 :
2.代码示例 :
package com.hanshuliang.shader.widget; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; import com.hanshuliang.shader.R; public class PaintBitmapShaderMirror extends View { public PaintBitmapShaderMirror(Context context) { super(context); } public PaintBitmapShaderMirror(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public PaintBitmapShaderMirror(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.WHITE); Paint mPaint = new Paint(); Bitmap mBitmap = ((BitmapDrawable)getResources(). getDrawable(R.mipmap.aodesai)).getBitmap(); //1. 创建位图渲染对象, 并设置拉伸方式, 此处设置Shader.TileMode.CLAMP, // 如果绘制的位置超出了图像的边界, 那么超出部分 使用镜像平铺方式填充 BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR); //2. 设置渲染到 Paint 对象 mPaint.setShader(bitmapShader); //3. 打开抗锯齿 mPaint.setAntiAlias(true); //4. 绘制指定的矩形区域 canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint); } }