服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - android view实现一张图片的渐隐效果

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

2022-03-09 15:03cozyman Android

这篇文章主要为大家详细介绍了android view实现一张图片的渐隐效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

方法有三种,

第一种:

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

第二种:

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

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

第三种:

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

要实现的效果:

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

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

代码呈上:

Activity:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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);
 }
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/hadahuluwa/article/details/7423800

延伸 · 阅读

精彩推荐