所以我有点腌菜。我知道如何在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值时参考。希望这是有道理的
答案 0 :(得分:0)
答案 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);