2013-03-24 63 views
0

如果我在图像视图中显示灰度图像,是否可以编程方式更改其颜色?如果它很重要,图像具有需要保持透明的背景透明度。所以我只想改变实际图像部分的颜色。android imageview以编程方式更改颜色

+0

http://stackoverflow.com/a/7917978/1531054 – 2013-03-24 13:49:19

+0

这很有趣。我希望我可以使用像myImageView.setColor(Color.parseColor(“#ffff0000”)),类似于我更改我的应用程序中的字体颜色。这样我可以确定字体和图标是相同的颜色/透明度。但我可能能够提出这个建议。 – MrGibbage 2013-03-24 14:31:36

回答

0

我写了一个简单的自定义的ImageView前

下面

是代码,仅供参考:

public class ColorImageView extends ImageView 
{ 
private Context context; 
private boolean showColor; 
private Paint mPaint; 
private ColorMatrix cm; 
private Bitmap mBitmap; 

private float[] color = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0 }; 
private float[] normal = { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
     0, 0, 1, 0 }; 

public ColorImageView(Context context) 
{ 
    super(context); 
    init(context); 
} 

public ColorImageView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
    init(context); 
} 

public ColorImageView(Context context, AttributeSet attrs, int defStyle) 
{ 
    super(context, attrs, defStyle); 
    init(context); 
} 

private void init(Context context) 
{ 
    this.context = context; 
    showColor = false; 
    mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    cm = new ColorMatrix(); 
} 

@Override 
public void setImageResource(int resId) 
{ 
    // TODO Auto-generated method stub 
    super.setImageResource(resId); 
    mBitmap = BitmapFactory.decodeResource(context.getResources(), resId); 
    invalidate(); 
} 

@Override 
protected void onDraw(Canvas canvas) 
{ 
    // super.onDraw(canvas); 
    Paint paint = mPaint; 
    paint.setColorFilter(null); 
    canvas.drawBitmap(mBitmap, 0, 0, paint); 
    if (isShowColor()) 
    { 
     cm.set(color); 
    } 
    else 
    { 
     cm.set(normal); 
    } 
    paint.setColorFilter(new ColorMatrixColorFilter(cm)); 
    canvas.drawBitmap(mBitmap, 0, 0, paint); 
} 

public void setColor(int color) 
{ 
    float red = Color.red(color); 
    float green = Color.green(color); 
    float blue = Color.blue(color); 
    float alpha = Color.alpha(color); 
    // 0,6,12,18 
    this.color[0] = red/0xFF; 
    this.color[6] = green/0xFF; 
    this.color[12] = blue/0xFF; 
    this.color[18] = alpha/0xFF; 
    setShowColor(true); 
} 

public boolean isShowColor() 
{ 
    return showColor; 
} 

//set true to show custom color 
public void setShowColor(boolean showColor) 
{ 
    this.showColor = showColor; 
} 
} 

用法:在XML

1.put ColorImageView

2.设置的ImageView SRC代码

3.setColor($ {color})为您的自定义c olor

4.setShowColor(true)如果你想显示颜色。

5.ColorImageView.invalidate()。(忘了,如果这是必要的)

那么颜色偏移的ImageView就会显示。

相关问题