使用Canvas绘制半透明的位图(Android)

我有一个位图对象,并希望将其渲染到具有不同级别的半透明(即使整个位图部分透视)的canvas对象。 例如,我在一个游戏中绘制精灵(绘制在位图背景的顶部),我希望从不透明到不可见的淡出。 我可以做到这一点,而不必诉诸于OpenGL?

Solutions Collecting From Web of "使用Canvas绘制半透明的位图(Android)"

您应该能够定义补间animation并将该animation应用于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" /> 

那么你会加载和应用这个animation到你的自定义imageView准备就绪时:

 ImageView sprite = (ImageView) findViewById(R.id.sprite); Animation animation = AnimationUtils.loadAnimation(this, R.anim.fade_animation); sprite.startAnimation(animation); 

还有其他的select。 如果您使用的是位图,并且不想执行animation,则可以手动减less每个帧的Alpha值,如下所示:

 paint.setAlpha(100); canvas.drawBitmap(spriteImage, left, top, paint); 

你有没有尝试这些选项?

回顾Android文档(基于JSE和完全不同的GUI),下面将为您提供一个alpha通道支持的图像:

 Bitmap bmp=createBitmap(100,100,Bitmap.Config.ARGB_8888); 

只要位图是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); 

注意事项1:我从JavaDoc原位写了这段代码; 它没有被编译或testing。

注意事项2:如果硬件设备的颜色分辨率不支持alpha通道(通常称为32位颜色),则将任何图像绘制到底层graphics系统可能会忽略alpha通道。 但是之前在后台缓冲映像上进行的任何合成都应该受到尊重。 重点是你可能不得不使用双缓冲绘画做alpha混合,而不受底层的设备能力/configuration。