Imageview将滤镜设置为渐变

我有一个白色图像,我想用渐变颜色。 我不想生成一堆每个用特定渐变着色的图像,而是想在代码(而不是xml)中执行此操作。

要改变图像的颜色,我使用

imageView.setColorFilter(Color.GREEN); 

这很好用。 但是,如何应用渐变色而不是纯色? LinearGradient没有用,因为setColorFilter不能应用于Shader对象。

编辑 :这是我的形象:

在此处输入图像描述

这就是我要的:

在此处输入图像描述

这就是我得到的:

在此处输入图像描述

您必须获取ImageView Bitmap并使用Shader重绘相同的Bitmap

 public void clickButton(View v){ Bitmap myBitmap = ((BitmapDrawable)myImageView.getDrawable()).getBitmap(); Bitmap newBitmap = addGradient(myBitmap); myImageView.setImageDrawable(new BitmapDrawable(getResources(), newBitmap)); } public Bitmap addGradient(Bitmap originalBitmap) { int width = originalBitmap.getWidth(); int height = originalBitmap.getHeight(); Bitmap updatedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(updatedBitmap); canvas.drawBitmap(originalBitmap, 0, 0, null); Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0, 0, 0, height, 0xFFF0D252, 0xFFF07305, Shader.TileMode.CLAMP); paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawRect(0, 0, width, height, paint); return updatedBitmap; } 

更新3我改变了:渐变颜色,LinearGradient width = 0和PorterDuffXfermode。 这里有一个了解PorterDuffXfermode的好照片: 在此处输入图像描述

创建XML文件,并将其放在drawable文件夹中。

gradient.xml

      

接下来将其添加为图像视图的背景

   

你可以使用选择器

main_header.xml:

    

main_header_selector.xml:

         

相同的背景可以应用于ImageView。

要动态定义和使用选择器,请参阅以下链接: 动态定义和使用选择器