频道栏目
首页 > 资讯 > Android > 正文

Android Shader 颜色、图像渲染

15-07-17        来源:[db:作者]  
收藏   我要投稿

 

Shader

Shader是一个基类,表示在绘制期间颜色的水平跨度

它的子类被嵌入在Paint中使用,调用paint.setShader(shader)。

除Bitmap外的其它对象,使用该Paint进行绘制时,将从shader中获得颜色

 

Shader.TileMode 渲染模式

 

public enum TileMode { 
    CLAMP   (0),
    REPEAT  (1),
    MIRROR  (2);
    TileMode(int nativeInt) {
        this.nativeInt = nativeInt;
    }
    final int nativeInt;
}
CLAMP:如果超出原始bounds(即原图的边界),则重复边缘上的color

 

 

REPEAT:重复bitmap

MIRROR:重复bitmap,与REPEAT不同的时,它是镜像重复,即:反向重复

 

Shader 子类:

BitmapShader (android.graphics) 图像渲染
ComposeShader (android.graphics) 组合渲染
LinearGradient (android.graphics) 线性渲染
RadialGradient (android.graphics) 环形渲染
SweepGradient (android.graphics) 扫描渲染

 

BitmapShader

new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.MIRROR); 以某个渲染模式 进行 图像渲染

 

ComposeShader

new ComposeShader(shaderA, shaderB, PorterDuff.Mode.DST); 组合两种渲染效果,以PorterDuff.Mode进行组合

 

LinearGradient

new LinearGradient(0, 0, bitmap.getWidth(), bitmap.getHeight(), 0x470000ff,0xefffff00, Shader.TileMode.CLAMP);

在一定区域内,以某种渲染模式,进行两种颜色间的线性变化

new LinearGradient(0, 0, bitmap.getWidth(), bitmap.getHeight(), new int[]{0xffabc777, 0x2300ff00, 0x470000ff, 0xefffff00}, new float[]{0.1f, 0.3f, 0.5f, 1.0f}, Shader.TileMode.CLAMP);

在一定区域内,以某种渲染模式,进行一组颜色间的线性变化,变化的位置由float数组决定。要求int数组和float数组,长度一致

 

RadialGradient

以点(x,y),半径为r,进行环形渲染

new RadialGradient(w/2, h/2, Math.min(w, h) /2, 0xddff00f0, 0xffabc777, Shader.TileMode.REPEAT);

new RadialGradient(w/2, h/2, Math.min(w, h) /2, new int[]{0xddff0000, 0x2300ff00, 0x470000ff, 0xffabc777}, new float[]{0.1f, 0.3f, 0.5f, 1.0f}, Shader.TileMode.CLAMP);

 

SweepGradient

以点(x,y),进行扫描渲染

new SweepGradient(w/2, h/2, 0xddff00f0, 0xffabc777);

new SweepGradient(w, h, new int[]{0xffff0000, 0xff00ff00, 0xff0000ff, 0xffabc777, 0xffee00ee}, new float[]{0.2f, 0.4f, 0.6f, 0.75f, 1f});

 

PorterDuff.Mode

 

canvas.drawBitmap(mDstB, 0, 0, paint);//先绘制目标
paint.setXfermode(sModes[i]);// 使用mode
canvas.drawBitmap(mSrcB, 0, 0, paint);//再绘制源
paint.setXfermode(null);//清除mode

 

 

相关TAG标签
上一篇:Android context空指针异常
下一篇:ViewPager切换动画PageTransformer的使用
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站