Android ImageView置灰

简介

ImageView 是 Android 开发中常用的控件之一,用于显示图片。有时候我们需要将图片置灰,以实现某种特效或者视觉效果。本文将介绍如何在 Android 中实现 ImageView 置灰的效果,并提供代码示例。

实现方式

要实现 ImageView 置灰的效果,可以通过修改图片的颜色矩阵来达到目的。具体步骤如下:

  1. 将图片转化为 Bitmap 对象。
  2. 创建一个颜色矩阵 ColorMatrix,并将其设置为灰度矩阵。
  3. 创建一个 ColorMatrixColorFilter 对象,将其传递给 Paint 对象。
  4. 创建一个新的 Bitmap 对象,将原始图片绘制到该 Bitmap 上,并应用 ColorMatrixColorFilter
  5. 将新的 Bitmap 设置给 ImageView

下面是代码示例:

// 获取原始图片
Drawable originalDrawable = imageView.getDrawable();
Bitmap originalBitmap = ((BitmapDrawable) originalDrawable).getBitmap();

// 创建灰度矩阵
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(0); // 设置饱和度为0,即转为灰度图像

// 创建颜色过滤器
ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);

// 创建新的Bitmap对象,并应用颜色过滤器
Bitmap grayBitmap = Bitmap.createBitmap(originalBitmap.getWidth(), originalBitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(grayBitmap);
Paint paint = new Paint();
paint.setColorFilter(colorFilter);
canvas.drawBitmap(originalBitmap, 0, 0, paint);

// 将新的Bitmap设置给ImageView
imageView.setImageBitmap(grayBitmap);

效果演示

下面是一个示例程序的效果演示:

public class MainActivity extends AppCompatActivity {

    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = findViewById(R.id.imageView);

        // 加载原始图片
        Glide.with(this)
                .load(R.drawable.image)
                .into(imageView);

        // 点击按钮将图片置灰
        Button grayButton = findViewById(R.id.grayButton);
        grayButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获取原始图片
                Drawable originalDrawable = imageView.getDrawable();
                Bitmap originalBitmap = ((BitmapDrawable) originalDrawable).getBitmap();

                // 创建灰度矩阵
                ColorMatrix colorMatrix = new ColorMatrix();
                colorMatrix.setSaturation(0); // 设置饱和度为0,即转为灰度图像

                // 创建颜色过滤器
                ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);

                // 创建新的Bitmap对象,并应用颜色过滤器
                Bitmap grayBitmap = Bitmap.createBitmap(originalBitmap.getWidth(), originalBitmap.getHeight(), Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(grayBitmap);
                Paint paint = new Paint();
                paint.setColorFilter(colorFilter);
                canvas.drawBitmap(originalBitmap, 0, 0, paint);

                // 将新的Bitmap设置给ImageView
                imageView.setImageBitmap(grayBitmap);
            }
        });
    }
}

通过点击按钮,即可将图片置灰。

总结

通过修改颜色矩阵,我们可以实现 ImageView 置灰的效果。首先将原始图片转为 Bitmap 对象,然后创建一个灰度矩阵,并将其应用到颜色过滤器上,最后将新的 Bitmap 设置给 ImageView,即可实现置灰效果。以上就是实现 ImageView 置灰的方法和示例代码。

甘特图

gantt
    dateFormat  YYYY-MM-DD
    title       ImageView置灰代码示例

    section 准备工作
    创建项目       :done,    2022-01-01, 1d
    添加ImageView  :done,    2022-01-02, 1d
    添加图片资源   :done,    2022-01-03, 1d

    section 实现置灰效果
    获取原始图片    :done,    2022-01-04, 1d
    创建灰度矩阵    :done,    2022-01-05, 1