我有一个Bitmap对象,并希望将其渲染到具有不同半透明度的Canvas对象(即使整个位图部分透视).例如,我在游戏中有精灵(在位图背景的顶部绘制),我希望从不透明变为不可见.我可以这样做而不必诉诸OpenGL吗?
YGL*_*YGL 12
您应该能够定义补间动画并将该动画应用于imageView.XML资源类似于以下内容(名为fade_animation.xml):
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="100" />
Run Code Online (Sandbox Code Playgroud)
然后,您可以在准备好时加载并将此动画应用于自定义imageView:
ImageView sprite = (ImageView) findViewById(R.id.sprite);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.fade_animation);
sprite.startAnimation(animation);
Run Code Online (Sandbox Code Playgroud)
还有其他选择.如果您正在使用位图并且您不想进行动画,那么您可以手动减少每个帧的alpha值,如下所示:
paint.setAlpha(100);
canvas.drawBitmap(spriteImage, left, top, paint);
Run Code Online (Sandbox Code Playgroud)
你尝试过这些选择吗?
Law*_*Dol -1
查看 Android 文档(它看起来基于 JSE,具有完全替代的 GUI),以下内容将为您提供 alpha 通道支持图像:
Bitmap bmp=createBitmap(100,100,Bitmap.Config.ARGB_8888);
Run Code Online (Sandbox Code Playgroud)
只要源位图支持 Alpha,您就应该能够将其绘制到另一个位图上并尊重其 Alpha 值。
要使其淡出,您需要以适当的延迟重复绘制图像(但由计时器驱动的事件,而不是循环,除非 Android 的渲染系统与其他 Java 非常不同),操作每个像素上的 alpha 通道连续油漆。
// Make image more transparent by 50%
int[] pxls=new int[100*100];
bmp.getPixels(pxls,0,100,0,0,100,100);
for(int xa=0,len=pxl.length; xa<len; xa++) {
int alp=(pxls[xa] & 0xFF000000);
alp<<1;
pxls[xa]=(alp | (pxls[xa] & 0x00FFFFFF);
}
bmp.setPixels(pxls,0,100,0,0,100,100);
Run Code Online (Sandbox Code Playgroud)
注意事项 1:我从 JavaDoc 中现场编写了这段代码;它尚未被编译或测试。
注意事项 2:如果硬件设备颜色分辨率不支持 alpha 通道(通常称为 32 位颜色),则将任何图像绘制到底层图形系统可能会忽略 alpha 通道。但在此之前您在后台缓冲区图像上所做的任何合成都应该受到尊重。关键是您可能必须使用双缓冲绘画来进行 alpha 混合,同时不受底层设备功能/配置的影响。
| 归档时间: |
|
| 查看次数: |
12411 次 |
| 最近记录: |