【问题标题】:How to dynamically change the opacity of the bitmap in android [duplicate]如何在android中动态更改位图的不透明度[重复]
【发布时间】:2012-08-22 22:25:59
【问题描述】:

可能重复:
Set alpha of Bitmap image!

我想在改变搜索栏的进度时改变位图的不透明度。我正在使用下面的代码。

opacityseekbar.setMax(255);
opacityseekbar.setProgress(255);
opacityseekbar.setOnSeekBarChangeListener( new OnSeekBarChangeListener()
                {

                    public void onStopTrackingTouch(SeekBar arg0) {
                        // TODO Auto-generated method stub


                    }

                    public void onStartTrackingTouch(SeekBar arg0) {
                        // TODO Auto-generated method stub

                    }

                    public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
                        // TODO Auto-generated method stub
                        Log.e("Progress Value", "Progress number" + arg1);


                        Bitmap mutableBitmap = theTattoo.isMutable()? theTattoo: theTattoo.copy(Bitmap.Config.ARGB_8888, true);
                        Canvas canvas = new Canvas(mutableBitmap);
                        int colour = ((opacityseekbar.getProgress() << 24) & 0xFF000000);
                        canvas.drawColor(colour, Mode.DST_IN);

                        theTattoo=mutableBitmap;




                    }
                });

但是,当我尝试这样做时。与搜索栏相比,它可以非常快速地改变不透明度。此外,即使我们增加搜索栏,它也总是会降低不透明度。我在做什么错?请分享您的建议。

【问题讨论】:

标签: android opacity alpha seekbar


【解决方案1】:

使用BitmapDrawable 而不是直接使用Bitmap

更改不透明度要容易得多:

BitmapDrawable bmpDrawable = new BitmapDrawable(getResources(), bitmap);
bmpDrawable.setAlpha(150);

【讨论】:

  • 我需要得到最终结果为位图
  • 这种情况下可以新建一个Bitmap,在bitmap上绘制BitmapDrawable。
  • 我试过这段代码。但它一次又一次地返回相同的位图。我认为它只适用于不透明度的静态变化而不是动态的。
  • 这也不仅仅适用于 HTC one M8。不知道为什么
  • 要获得最终结果为位图,只需调用bmpDrawable.getBitmap();
【解决方案2】:

您可以使用 Color.argb .. 这是示例代码。

canvas.drawColor(Color.argb(alpha, red, green, blue));

其中 alpha 是不透明度,因此您可以在 alpha 中使用您的 progess 值..

这里 aplha,红绿蓝必须是 0 到 255

在您的情况下,您必须每次都传递相同的 RGB,只需更改 Alpha 值

【讨论】:

  • 我们必须将 R、G、B 值设置为?我认为@Dalmas 的回答更直接一些。
猜你喜欢
  • 2011-07-04
  • 2012-02-22
  • 1970-01-01
  • 2017-04-02
  • 2016-09-02
  • 1970-01-01
  • 2012-01-20
  • 2012-02-08
相关资源
最近更新 更多