颜色的过滤 不是很懂,牵扯到颜色的数组配置吧,只把简单的代码写下吧: 
 
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)); 
一个针对单色彩一个针对一个颜色矩阵










