android view實(shí)現(xiàn)一張圖片的漸隱效果
因?yàn)橐粋€(gè)Android項(xiàng)目的緣故要在軟件打開界面輪流顯示兩張照片,不想讓兩張圖片替換的太生硬,所以讓其中一張圖片漸隱,逐漸顯示第二張圖片。
方法有三種,
第一種:
將漸隱的圖片做好幾張,透明度從255----0.這樣輪流顯示不同透明度的圖片,出現(xiàn)漸隱效果。但是,這種方法浪費(fèi)資源,舍棄。(在view中繪畫)
第二種:
只用一張圖片,將圖片的每一點(diǎn)的像素信息保存到數(shù)組中,每一點(diǎn)像素是ARGB的方式,正好32位,放到一個(gè)int類型的值中。然后改變int值的高八位的大小,實(shí)現(xiàn)對(duì)alpha值的改變。在將改變的數(shù)組信息創(chuàng)造一張新的圖片就可以了。
本文重點(diǎn)介紹這一種方法。(在view中繪畫)
第三種:
前兩種都是在view中實(shí)現(xiàn),也可以再布局中實(shí)現(xiàn),用imageswitcher和進(jìn)出動(dòng)畫來實(shí)現(xiàn),這個(gè)方法在下一篇中介紹。
要實(shí)現(xiàn)的效果:
第一張圖片顯示1秒后,逐漸隱藏,第二張圖片出現(xiàn)。
效果很簡(jiǎn)單就不貼圖了。總共兩個(gè)文件,一個(gè)activity一個(gè)view。
代碼呈上:
Activity:
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);//第一張圖片時(shí)間顯示為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);
//在這里才產(chǎn)生contex,才可以對(duì)view進(jìn)行初始化
simpleFlash=new SimpleFlash(this,handler);
setContentView(simpleFlash);
}
}
view:
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 相當(dāng)于沒有進(jìn)行移位 >=32位的時(shí)候與移的為數(shù)是與32的余數(shù)
*/
( ( (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函數(shù)執(zhí)行完畢才能顯示出圖片,應(yīng)該是執(zhí)行完畢后才能提交繪畫消息
*/
public void onDraw(Canvas canvas)
{
this.canvas=canvas;
canvas.drawBitmap(secondBitmap, 0, 0, null);
/*
* 不會(huì)先顯示第二個(gè)圖片,5秒后在顯示第一個(gè)圖片
*/
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);
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
21天學(xué)習(xí)android開發(fā)教程之XML解析與生成
21天學(xué)習(xí)android開發(fā)教程之XML解析與生成,使用SAX來解析XML,在Android里面可以使用SAX和DOM,DOM需要把整個(gè)XML文件讀入內(nèi)存再解析,比較消耗內(nèi)存,而SAX基于事件驅(qū)動(dòng)的處理方式,可以在各節(jié)點(diǎn)觸發(fā)回調(diào)函數(shù),需要的朋友可以參考下2016-02-02
Android實(shí)現(xiàn)快遞物流跟蹤布局效果
本篇文章主要介紹了Android實(shí)現(xiàn)快遞跟蹤布局效果,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
Android開發(fā)Viewbinding委托實(shí)例詳解
這篇文章主要為大家介紹了Android開發(fā)Viewbinding委托實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Android studio利用gradle打jar包并混淆的方法詳解
昨天準(zhǔn)備把寫好的代碼使用gradle打jar包出來,并打算加混淆。打jar包容易,結(jié)果在混淆上走了彎路。所以這篇文章主要介紹了關(guān)于Android studio利用gradle打jar包并混淆的方法,需要的朋友可以參考下。2017-03-03

