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)畫來(lái)實(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)于沒(méi)有進(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)文章
Android基于虹軟(ArcSoft)實(shí)現(xiàn)人臉識(shí)別
人工智能時(shí)代快速來(lái)臨,其中人臉識(shí)別是當(dāng)前比較熱門的技術(shù),在國(guó)內(nèi)也越來(lái)越多的運(yùn)用,例如刷臉打卡,刷臉APP,身份識(shí)別,人臉門禁等。本文將為大家介紹Android基于虹軟(ArcSoft)實(shí)現(xiàn)人臉識(shí)別的demo,快來(lái)跟隨小編一起學(xué)習(xí)吧2021-12-12android?studio數(shù)據(jù)存儲(chǔ)建立SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪查改
這篇文章主要介紹了vandroid?studio數(shù)據(jù)存儲(chǔ)建立SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪查改,分別使用sqlite3工具和Android代碼的方式建立SQLite數(shù)據(jù)庫(kù),具體內(nèi)容,需要的小伙伴可以參考下面文章得詳細(xì)內(nèi)容2021-12-12Android開發(fā)之關(guān)閉和打開Speaker(揚(yáng)聲器)的方法
這篇文章主要介紹了Android開發(fā)之關(guān)閉和打開Speaker(揚(yáng)聲器)的方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Android揚(yáng)聲器的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-03-03Android實(shí)現(xiàn)在map上畫出路線的方法
這篇文章主要介紹了Android實(shí)現(xiàn)在map上畫出路線的方法,較為詳細(xì)的分析了Android在map上繪制路線所涉及的map圖調(diào)用、畫筆的使用、頁(yè)面布局及權(quán)限控制的相關(guān)技巧,需要的朋友可以參考下2015-07-07Android實(shí)現(xiàn)的可以調(diào)整透明度的圖片查看器實(shí)例
這篇文章主要介紹了Android實(shí)現(xiàn)的可以調(diào)整透明度的圖片查看器,需要的朋友可以參考下2014-07-07Android編程中selector背景選擇器用法實(shí)例分析
這篇文章主要介紹了Android編程中selector背景選擇器用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Selector的結(jié)構(gòu)描述與使用技巧,需要的朋友可以參考下2016-01-01ExpandListView實(shí)現(xiàn)下拉列表案例
這篇文章主要為大家詳細(xì)介紹了ExpandListView實(shí)現(xiàn)下拉列表案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08解決Android平臺(tái)中應(yīng)用程序OOM異常的方法
這篇文章主要介紹了解決Android平臺(tái)中應(yīng)用程序OOM異常的方法,通常這一塊也是程序中的重點(diǎn)之一,感興趣的小伙伴們可以參考一下2015-12-12