android view实现一张图片的渐隐效果
因为一个Android项目的缘故要在软件打开界面轮流显示两张照片,不想让两张图片替换的太生硬,所以让其中一张图片渐隐,逐渐显示第二张图片。
方法有三种,
第一种:
将渐隐的图片做好几张,透明度从255----0.这样轮流显示不同透明度的图片,出现渐隐效果。但是,这种方法浪费资源,舍弃。(在view中绘画)
第二种:
只用一张图片,将图片的每一点的像素信息保存到数组中,每一点像素是ARGB的方式,正好32位,放到一个int类型的值中。然后改变int值的高八位的大小,实现对alpha值的改变。在将改变的数组信息创造一张新的图片就可以了。
本文重点介绍这一种方法。(在view中绘画)
第三种:
前两种都是在view中实现,也可以再布局中实现,用imageswitcher和进出动画来实现,这个方法在下一篇中介绍。
要实现的效果:
第一张图片显示1秒后,逐渐隐藏,第二张图片出现。
效果很简单就不贴图了。总共两个文件,一个activity一个view。
代码呈上:
Activity:
packageliu.com.kiexun; importandroid.app.Activity; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; publicclassSimpleTestActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ SimpleFlashsimpleFlash; booleanflag=true; privateHandlerhandler=newHandler() { publicvoidhandleMessage(Messagemsg) { switch(msg.what) { case1: if(flag) { try { Thread.sleep(1000);//第一张图片时间显示为1秒 }catch(InterruptedExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } flag=false; } simpleFlash.invalidate(); break; default: break; } }; }; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //在这里才产生contex,才可以对view进行初始化 simpleFlash=newSimpleFlash(this,handler); setContentView(simpleFlash); } }
view:
packageliu.com.kiexun; importandroid.content.Context; importandroid.graphics.Bitmap; importandroid.graphics.Bitmap.Config; importandroid.graphics.BitmapFactory; importandroid.graphics.Canvas; importandroid.graphics.Color; importandroid.os.Handler; importandroid.os.Message; importandroid.view.MotionEvent; importandroid.view.View; publicclassSimpleFlashextendsView { intindex=0; intsize=480*800; BitmapfirstBitmap,secondBitmap; Canvascanvas=null; intpixels[]=newint[size]; Handlerhandler; intchangeArrary[]= { (1<<31)-1, (1<<30)-1, (1<<29)-1, (1<<28)-1, (1<<27)-1, (1<<26)-1, (1<<25)-1, (1<<24)-1 }; intchangeArrary2[]={ /*11111110 11111100 11111000 11110000 11100000 11000000 10000000 01111111 00111111 00011111 00001111 00000111 00000011 00000001 00000000 1<<32相当于没有进行移位>=32位的时候与移的为数是与32的余数 */ (((1<<31)-1)+(1<<31)-(1<<24)), (((1<<31)-1)+(1<<31)-(1<<24)-(1<<25)), (((1<<31)-1)+(1<<31)-(1<<24)-(1<<25)-(1<<26)), (((1<<31)-1)+(1<<31)-(1<<24)-(1<<25)-(1<<26)-(1<<27)), (((1<<24)-1)+(1<<31)+(1<<30)+(1<<29)), (((1<<24)-1)+(1<<31)+(1<<30)), (((1<<24)-1)+(1<<31)), (1<<31)-1, (1<<30)-1, (1<<29)-1, (1<<28)-1, (1<<27)-1, (1<<26)-1, (1<<25)-1, (1<<24)-1 }; publicSimpleFlash(Contextcontext,Handlerhandler) { super(context); this.handler=handler; //TODOAuto-generatedconstructorstub firstBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.about); secondBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.help); firstBitmap.getPixels(pixels,0,480,0,0,480,800); } /* *(non-Javadoc) *@seeandroid.view.View#onDraw(android.graphics.Canvas) *draw函数执行完毕才能显示出图片,应该是执行完毕后才能提交绘画消息 */ publicvoidonDraw(Canvascanvas) { this.canvas=canvas; canvas.drawBitmap(secondBitmap,0,0,null); /* *不会先显示第二个图片,5秒后在显示第一个图片 */ firstBitmap=Bitmap.createBitmap(pixels,480,800,Config.ARGB_8888); canvas.drawBitmap(firstBitmap,0,0,null); changePixels(); try { Thread.sleep(100); }catch(InterruptedExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicvoidchangePixels() { if(index<8) { for(inti=1;i以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。