【问题标题】:How to set an Image's alpha in android如何在android中设置图像的alpha
【发布时间】:2018-05-28 02:01:26
【问题描述】:

所以我有点担心。我知道如何在 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 部分只是一个自定义位图类。 backupImg 只是 img 的一个副本,在该函数所属对象的构造函数中创建。

请记住,这将是一个基于画布的位图。如果我没记错的话 imageView 没有画在画布上?所以,再举一个例子。想象一个画在画布上的精灵,你想改变它的 alpha。因此,您可以使用我发布的功能进行操作。现在,假设您要撤消更改并将其恢复为精灵的原始 alpha 值,具有其他值。好吧,你不能因为图像的 alpha 值已经永久更改。我想要做的是使用另一个变量存储对原始图像的引用,并在我需要调整图像的 alpha 值时引用它。希望这是有道理的

【问题讨论】:

  • 显然,您必须要么跟踪原始值,要么从未更改的图像中读取它,不是吗?
  • 我在名为 backupImg 的变量中。它的值仅在构造对象时设置,否则永远不会更改。只是想弄清楚如何做到这一点

标签: java android canvas bitmap alpha


【解决方案1】:

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

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

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

【讨论】:

  • 那只是为了图像吗?请记住,这一切都在画布上,而且是为了游戏。所以它需要实时发生
  • 是的,这可以在 View 的子类(Android 中的每个视图都是 View 类的子类)类的任何视图上完成。如果需要实时执行此操作,您可以在运行时使用 Java 执行此操作。也请参阅该链接。
  • @AndrewMacMillan 不要尝试将 alpha 设置为位图尝试将其设置为视图。您必须将该位图显示到某个视图,想想如何将 alpha 应用于该视图。
  • 在这种情况下,您的视图是img。所以使用.setAlpha 设置alpha。 Check docs for reference
【解决方案2】:

您可以从 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);

【讨论】:

  • 这是画布上的对象吗?或在活动中。如果您注意到我实际上是通过 caanvas 执行此操作的功能
  • 对不起,我听不懂你在说什么,你能澄清更多。我想你想为图像设置 alpha 对吗?
  • 正确,位图的 alpha。因此,如果我在画布上绘制了一个角色精灵,我希望能够使用更新的 alpha 值重新绘制它
  • 这不是我在原始帖子中的内容吗? @Prits Ramani 另外,请记住 setAlpha 或油漆的值介于 0-255 之间
  • 是的,我知道代码有效。但是,如果您返回并尝试将同一位图的 alpha 值调整为其他数字,它会更加透明,或者与更改后的值一样透明。再也不会了。因此,在那之后您将无法将 alpha 值设置为 85%。相反,它将是 75% 的 85%
【解决方案3】:

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

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

你会想要这样做

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

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 2017-05-25
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2011-02-19
    • 2021-11-05
    相关资源
    最近更新 更多