【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )(二)

( 2 ) 位图渲染 REPEAT 拉伸 代码示例 及 效果 ( 绘制超出图片边界时, 就会绘制 同样的图片 填充剩余部分 )


REPEAT 拉伸 :


1.REPEAT 说明 : 在创建 BitmapShader 的时候, 设置其 水平 和 垂直方向的 拉伸方式为 Shader.TileMode.REPEAT , 则在绘制超出图片边界时, 就会绘制 同样的图片 填充剩余部分 ;

2.展示效果 :【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )(二)


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.展示效果 :

【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )(二)

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);
    }
}





上一篇:jsp ResultSet用法(引)


下一篇:【随笔】聊一聊服务器的那些事儿