【问题标题】:Create alpha gradient on image to create fade effect在图像上创建 alpha 渐变以创建淡入淡出效果
【发布时间】:2012-08-28 01:39:29
【问题描述】:

如何在图像上应用 Alpha 渐变,使其线性淡化? 现在,我正在创建单位宽度的矩形,并使用它来绘制位图,其中包含一个在循环中更改 alpha 值的绘制对象。我只是这样做,因为我想不出其他任何事情。所以更整洁的方式会更好。

Bitmap bitmap = BitmapFactory.decodeStream(is);
Bitmap bmp = Bitmap.createScaledBitmap(bitmap, 100, 151, true));
bitmap.recycle();

Rect Rect1 = new Rect(0, 0, 100, 100);
Rect Rect2 = new Rect(100, 0, 101, 100);

Paint paint = new Paint();

canvas.drawBitmap(bmp, Rect1, Rect1, null);
while (paint.getAlpha() != 0) {
    paint.setAlpha(paint.getAlpha() - 5);
    canvas.drawBitmap(bmp, Rect2, Rect2, paint);
    Rect2.set(Rect2.left + 1, Rect2.top, Rect2.right + 1, Rect2.bottom);
}

类似的东西

附:我正在尝试为动态壁纸执行此操作。

【问题讨论】:

  • 你试过 GradientDrawable 了吗?或许可以用透明的方式把它放在上面……
  • @sandrstar 我想对图像应用渐变,以便它后面的任何东西都可见。我认为您的意思是我可以使用 GradientDrawable 在图像上添加颜色渐变?
  • 这可以用 opengl 完成,但我怀疑你想走那条路。
  • 另一种方法是,如果您可以获得位图的宽度和高度,您可以通过您在循环中指定的任何内容来编辑每一行像素的 alpha 值。这个我觉得是最直接的方式。
  • @TimeManx 对。至少你可以试试。或者,您可以查看 GradientDrawable 资源,了解可能的实施思路。

标签: android android-canvas live-wallpaper


【解决方案1】:

很可能,仅通过视图操作即可满足所需的行为。 为此,您应该:

  • 准备可绘制的形状

res/drawable/gradient_shape.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
            android:startColor="#00FFFFFF"
            android:endColor="#FFFFFFFF"
            android:type="linear" />
</shape>
  • 定义布局:activity_main.xml

    <ImageView
        android:id="@+id/photo"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/photo"
        android:src="@drawable/gradient_shape" />
    

    这里 drawable/photo 只是 drawables 文件夹中的 jpeg;

  • 有人建议将以下代码添加到活动中(实际上,它取决于设备本机配置,对于现在 > 3.0 的设备来说似乎是多余的):

    public void onAttachedToWindow() {
         super.onAttachedToWindow();
         Window window = getWindow();
         window.setFormat(PixelFormat.RGBA_8888);
     }
    

之后,我在 4.1 设备上观察到以下情况:

它看起来像渐变。我仍然不确定它是否是您正在寻找的东西。

【讨论】:

  • 这也是我得到的。但是,如果我有一个图像作为布局的背景设置,我希望它开始变得可见而不是颜色。添加了一张我想要的图片。
  • 已经尝试了一些自定义视图和着色器的东西(就像这里 stackoverflow.com/questions/5231260/… 一样,比如将 alpha 通道添加到解码图像并尝试使用渐变着色器绘制它),但不幸的是没有足够的时间工作出完整的解决方案。你试过这种方法吗?
  • 感谢您的链接。我还没试过。我切换到opengl,因为画布对于这个和我试图做的其他一些事情来说太慢了。我会尝试并回复你。
猜你喜欢
  • 2021-02-17
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多