如何在Android

时间:2017-12-14 03:46:33

标签: java android canvas bitmap alpha

所以我有点腌菜。我知道如何在android中设置位图的alpha值。我不知道怎么做才是可逆的。所以,让我们说某人想要将图像的alpha设置为50%,所以他们这样做了。现在让我们说他们想把它设置为75%(请记住,这是原始图像的alpha值)。目前,我所拥有的是一个将设置当前图像的alpha值的函数,因此如果有意义的话,它将是50%alpha值的75%。如何才能使其占据原始图像?

public Pixmap setAlpha(float newAlpha) { //integer between 0-100
    if (newAlpha != alpha) { //to check if the current alpha value of the image is equal to your desired alpha. to avoid always halving you alpha value
        float test = newAlpha/100.0f;
        float test2 = test * 255;
        alpha = test2;
        Bitmap newBM = Bitmap.createBitmap(backupImg.getBitmap().getWidth(),backupImg.getBitmap().getHeight(), Bitmap.Config.ARGB_8888);
        Canvas cc = new Canvas(newBM);
        cc.drawARGB(0,0,0,0);
        Paint newPaint = new Paint();
        newPaint.setAlpha((int)test2);
        cc.drawBitmap(backupImg.getBitmap(), 0, 0, newPaint);
        img.setBitmap(newBM);
        return img;
    } else {
        return img;
    }
}

Pixmap部分只是一个自定义的Bitmap类。 backupImg只是img的副本,在此函数所属的对象的构造函数中创建。

请记住,这将是基于画布的位图。如果我没记错的话,在画布上没有画出图像?所以,作为进一步的例子。想象一下绘制到画布上的精灵,你想要改变它的alpha。所以你使用我发布的功能来做到这一点。现在,让我们假设你要撤消更改并将其恢复为精灵的原始alpha,以及其他一些值。好吧,你不能因为图像的alpha值已经永久改变了。我想要做的是使用另一个变量存储对原始图像的引用,并在需要调整图像的alpha值时参考。希望这是有道理的

3 个答案:

答案 0 :(得分:0)

为什么不将alpha设置为ImageView而不是将其设置为位图。

通过将alpha设置为ImageView或说出任何视图,您可以轻松地将其反转。

请参阅this answer以进行此操作。

答案 1 :(得分:0)

您可以从xml执行此操作。只需在imageview标记中添加以下行: -

android:alpha="0.5"

您可以将alpha设置为0到1.上面的行将alpha设置为0.5的一半。

对于位图:

Bitmap newBitmap = Bitmap.createBitmap(originalBitmap.getWidth(), 
   originalBitmap.getHeight(), Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(newBitmap);

Paint alphaPaint = new Paint();
alphaPaint.setAlpha(75);
canvas.drawBitmap(originalBitmap, 0, 0, alphaPaint);

答案 2 :(得分:0)

我自己解决了这个问题。所以,我写的函数没有错。相反,问题在于Java如何使用指针。因为所有内容都是通过引用传递的,所以我实际上是引用相同的对象,而不是创建两个单独的对象。所以而不是:

Bitmap oldBM = new Bitmap();
Bitmap newBM = oldBM;

你会反而想做

Bitmap oldBM = new Bitmap();
Bitmap newBM = new Bitmap(using old bitmap's value);