前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android view实现一张图片的渐隐效果

android view实现一张图片的渐隐效果

作者头像
砸漏
发布2020-11-05 10:47:31
1K0
发布2020-11-05 10:47:31
举报
文章被收录于专栏:恩蓝脚本

因为一个Android项目的缘故要在软件打开界面轮流显示两张照片,不想让两张图片替换的太生硬,所以让其中一张图片渐隐,逐渐显示第二张图片。

方法有三种,

第一种:

将渐隐的图片做好几张,透明度从255—-0.这样轮流显示不同透明度的图片,出现渐隐效果。但是,这种方法浪费资源,舍弃。(在view中绘画)

第二种:

只用一张图片,将图片的每一点的像素信息保存到数组中,每一点像素是ARGB的方式,正好32位,放到一个int类型的值中。然后改变int值的高八位的大小,实现对alpha值的改变。在将改变的数组信息创造一张新的图片就可以了。

本文重点介绍这一种方法。(在view中绘画)

第三种:

前两种都是在view中实现,也可以再布局中实现,用imageswitcher和进出动画来实现,这个方法在下一篇中介绍。

要实现的效果:

第一张图片显示1秒后,逐渐隐藏,第二张图片出现。

效果很简单就不贴图了。总共两个文件,一个activity一个view。

代码呈上:

Activity:

代码语言:javascript
复制
package liu.com.kiexun;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
 
public class SimpleTestActivity extends Activity {
  /** Called when the activity is first created. */
 SimpleFlash simpleFlash;
 boolean flag=true;
 private Handler handler=new Handler()
 {
  public void handleMessage(Message msg)
  {
  switch(msg.what)
  {
   case 1:
   if (flag)
   {
    try
    {
    Thread.sleep(1000);//第一张图片时间显示为1秒
    } catch (InterruptedException e)
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    flag=false;
   }  
   simpleFlash.invalidate(); 
   break;  
   default:
   break;  
  }  
  }; 
 };
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //在这里才产生contex,才可以对view进行初始化
    simpleFlash=new SimpleFlash(this,handler);
    setContentView(simpleFlash);
  }
}

view:

代码语言:javascript
复制
package liu.com.kiexun;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
public class SimpleFlash extends View
{
int index=0;
int size=480*800;
Bitmap firstBitmap,secondBitmap;
Canvas canvas=null;
int pixels[]=new int[size];
Handler handler ;
int changeArrary[]=
{
(1<<31)-1,
(1<<30)-1,
(1<<29)-1,
(1<<28)-1,
(1<<27)-1,
(1<<26)-1,
(1<<25)-1,
(1<<24)-1
};
int changeArrary2[]={
/*  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
};
public SimpleFlash(Context context,Handler handler)
{
super(context);
this.handler=handler;
// TODO Auto-generated constructor stub
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)
* @see android.view.View#onDraw(android.graphics.Canvas)
* draw函数执行完毕才能显示出图片,应该是执行完毕后才能提交绘画消息
*/
public void onDraw(Canvas canvas)
{
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 (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void changePixels()
{
if (index<8)
{
for (int i = 1; i < pixels.length; i++)
{
pixels[i]=pixels[i]&changeArrary[index];
}
index++;
Message changeMessage=new Message();
changeMessage.what=1;
handler.sendMessage(changeMessage); 
}
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档