颜色的过滤 不是很懂,牵扯到颜色的数组配置吧,只把简单的代码写下吧:
mBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.balloons);
mDrawable = context.getResources().getDrawable(R.drawable.balloons);
上面两个代码 分别得到一个Bitmap,和Drawable
private static void setContrastTranslateOnly(ColorMatrix cm, float contrast) {
float scale = contrast + 1.f;
float translate = (-.5f * scale + .5f) * 255.f;
cm.set(new float[] {
1, 0, 0, 0, translate,
0, 1, 0, 0, translate,
0, 0, 1, 0, translate,
0, 0, 0, 1, 0,
});
}
private static void setContrastScaleOnly(ColorMatrix cm, float contrast) {
float scale = contrast + 1.f;
// float translate = (-.5f * scale + .5f) * 255.f;
cm.set(new float[] {
scale, 0, 0, 0, 0,
0, scale, 0, 0, 0,
0, 0, scale, 0, 0,
0, 0, 0, 1, 0 });
}
设置一个矩阵 进行颜色变化吧 只是没搞懂设置数值和颜色的关系
ColorMatrix cm = new ColorMatrix();
mAngle += 2;
if (mAngle > 180) {
mAngle = 0;
}
//convert our animated angle [-180...180] to a contrast value of [-1..1]
float contrast = mAngle / 180.f;
setContrastTranslateOnly(cm, contrast);
// 画笔设置颜色过滤
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(mBitmap, x, y + 2*(mBitmap.getHeight() + 10),
paint);
//图片设置颜色过滤
// setContrastTranslateOnly(cm, contrast);
// mDrawable.setColorFilter(new ColorMatrixColorFilter(cm));
mDrawable.setColorFilter(new PorterDuffColorFilter( 0xffff00,PorterDuff.Mode.LIGHTEN));
mDrawable.setBounds(new Rect(25, 330,150,430));
mDrawable.draw(canvas);
画笔设置过滤 和图片设置过滤我没看出区别有多大,但是这里有两种方法设置颜色过滤
mDrawable.setColorFilter(new PorterDuffColorFilter( 0xffff00,PorterDuff.Mode.LIGHTEN));
mDrawable.setColorFilter(new ColorMatrixColorFilter(cm));
一个针对单色彩一个针对一个颜色矩阵
mBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.balloons);
mDrawable = context.getResources().getDrawable(R.drawable.balloons);
上面两个代码 分别得到一个Bitmap,和Drawable
private static void setContrastTranslateOnly(ColorMatrix cm, float contrast) {
float scale = contrast + 1.f;
float translate = (-.5f * scale + .5f) * 255.f;
cm.set(new float[] {
1, 0, 0, 0, translate,
0, 1, 0, 0, translate,
0, 0, 1, 0, translate,
0, 0, 0, 1, 0,
});
}
private static void setContrastScaleOnly(ColorMatrix cm, float contrast) {
float scale = contrast + 1.f;
// float translate = (-.5f * scale + .5f) * 255.f;
cm.set(new float[] {
scale, 0, 0, 0, 0,
0, scale, 0, 0, 0,
0, 0, scale, 0, 0,
0, 0, 0, 1, 0 });
}
设置一个矩阵 进行颜色变化吧 只是没搞懂设置数值和颜色的关系
ColorMatrix cm = new ColorMatrix();
mAngle += 2;
if (mAngle > 180) {
mAngle = 0;
}
//convert our animated angle [-180...180] to a contrast value of [-1..1]
float contrast = mAngle / 180.f;
setContrastTranslateOnly(cm, contrast);
// 画笔设置颜色过滤
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(mBitmap, x, y + 2*(mBitmap.getHeight() + 10),
paint);
//图片设置颜色过滤
// setContrastTranslateOnly(cm, contrast);
// mDrawable.setColorFilter(new ColorMatrixColorFilter(cm));
mDrawable.setColorFilter(new PorterDuffColorFilter( 0xffff00,PorterDuff.Mode.LIGHTEN));
mDrawable.setBounds(new Rect(25, 330,150,430));
mDrawable.draw(canvas);
画笔设置过滤 和图片设置过滤我没看出区别有多大,但是这里有两种方法设置颜色过滤
mDrawable.setColorFilter(new PorterDuffColorFilter( 0xffff00,PorterDuff.Mode.LIGHTEN));
mDrawable.setColorFilter(new ColorMatrixColorFilter(cm));
一个针对单色彩一个针对一个颜色矩阵