我有一个位图对象,并希望将其渲染为具有不同透明度级别的画布对象(即使整个位图部分透视)。例如,我在一个游戏中绘制精灵(绘制在位图背景的顶部),我想从不透明变为不可见。我可以做到这一点,而不必诉诸于OpenGL?使用画布绘制半透明位图(Android)
8
A
回答
-1
回顾的Android DOC(看起来基于JSE用完全替代GUI),以下将得到你一个alpha通道支承图像:
Bitmap bmp=createBitmap(100,100,Bitmap.Config.ARGB_8888);
只要源位图是α-支持,你应该能够将它绘制到另一个位图上并使其具有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);
注意事项1:我从JavaDoc原位写了这段代码;它没有被编译或测试。注意事项2:如果硬件设备的颜色分辨率不支持Alpha通道(通常称为32位颜色),则将任何图像绘制到底层图形系统可能干脆忽略alpha通道)。但是在之前在后台缓冲映像上进行的任何合成应该受到尊重。关键是你可能有使用双缓冲绘画进行alpha混合,同时不受底层设备功能/配置的影响。
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" />
那么你会加载和这部动画应用到您的自定义的ImageView时准备:
ImageView sprite = (ImageView) findViewById(R.id.sprite);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.fade_animation);
sprite.startAnimation(animation);
还有其他的选择太。如果你正在使用位图和你不想做一个动画,这时你可以手动减少每一帧的Alpha值,有点像这样:
paint.setAlpha(100);
canvas.drawBitmap(spriteImage, left, top, paint);
你有没有尝试任何这些选项?
相关问题
- 1. 用半透明视图绘制阴影
- 2. Python&半透明画布
- 3. 用半透明PNG遮罩画布
- 4. 在画布上绘制透明形状
- 5. Javascript HTML5画布绘制透明圆圈
- 6. 带半透明(半透明)带的绘制路径
- 7. 用ImageMagick绘制半透明线条
- 8. 绘制半透明可绘制在Android中,但黑边
- 9. 画布上的半透明橡皮刷
- 10. 在wxwidgets中绘制半透明窗口
- 11. Android透明画布(surfaceview)
- 12. HTML5画布绘制多个透明PNG图像
- 13. 在画布中,如何绘制2个半透明重叠圆圈
- 14. Android:在透明色中用手指在位图上绘制
- 15. 如何制作半透明布局?
- 16. Android绘制透明度
- 17. 如何在Android中使画布透明?
- 18. 透过BitMap制作透明画布
- 19. 修剪透明背景的画布用PHP或javascript绘制的画布
- 20. 如何使用画布在位图中绘制笔画?
- 21. 绘制透明NSImage中使得透明
- 22. 透明或半透明面板控制
- 23. 绘制透明图像
- 24. 绘制透明图像
- 25. drawBitmap使用透明位图绘制,替换原始像素
- 26. Actionscript 3-在位图上使用透明度绘制()
- 27. 如何使用透明度绘制位图
- 28. 在画布上反转绘制位图
- 29. OnDraw:画布不是绘制位图
- 30. 绘制隐藏在半透明视图下的阴影?
感谢您的代码。我知道这种方法,但循环了一些像这样的小小精灵,每一帧都会破坏我的帧率。我之前编写过这样的代码,它严重的慢了循环和操作单个像素。必须有一种更简单的方法,因为几个GUI元素具有快速衰落效果。 – wordyword 2010-03-26 18:56:55