最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android編程根據(jù)系列圖片繪制動(dòng)畫實(shí)例總結(jié)

 更新時(shí)間:2015年11月18日 12:31:00   作者:段殘夢(mèng)  
這篇文章主要介紹了Android編程根據(jù)系列圖片繪制動(dòng)畫的方法,以實(shí)例形式總結(jié)了Android根據(jù)圖片繪制動(dòng)畫的常見(jiàn)情況與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了Android編程根據(jù)系列圖片繪制動(dòng)畫的方法。分享給大家供大家參考,具體如下:

一、采用系統(tǒng)提供的Animation類,用自帶的方法

其中的animation.xml文件如下:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> 
 <item android:drawable="@drawable/a" android:duration="100" /> 
 <item android:drawable="@drawable/b" android:duration="100" /> 
 <item android:drawable="@drawable/c" android:duration="100" /> 
 <item android:drawable="@drawable/d" android:duration="100" /> 
 <item android:drawable="@drawable/e" android:duration="100" /> 
 <item android:drawable="@drawable/f" android:duration="100" /> 
 <item android:drawable="@drawable/g" android:duration="100" /> 
 <item android:drawable="@drawable/h" android:duration="100" /> 
 <item android:drawable="@drawable/i" android:duration="100" /> 
 <item android:drawable="@drawable/j" android:duration="100" /> 
</animation-list> 

AnimationDrawable animationDrawable = null; 
/**拿到ImageView對(duì)象**/ 
 imageView = (ImageView)findViewById(R.id.imageView); 
 /**通過(guò)ImageView對(duì)象拿到背景顯示的AnimationDrawable**/ 
 animationDrawable = (AnimationDrawable) imageView.getBackground(); 
 /**開(kāi)始播放動(dòng)畫**/ 
 button0 = (Button)findViewById(R.id.button0); 
 button0.setOnClickListener(new OnClickListener() { 
 @Override 
 public void onClick(View arg0) { 
 /**播放動(dòng)畫**/ 
 if(!animationDrawable.isRunning()) { 
  animationDrawable.start(); 
 } 
 } 
});

其中://設(shè)置單次播放 animationDrawable.setOneShot(true);

二、提供了很多幀動(dòng)畫的圖片,利用android繪圖,可以繪制出人物走動(dòng)的動(dòng)畫。

如上圖,這種情況下,可以按照如下步驟,繪制動(dòng)畫:

1、 根據(jù)人物上下左右行走,可以分為四段動(dòng)畫,可以定義一個(gè)長(zhǎng)度為4的動(dòng)畫數(shù)組;
2、 根據(jù)鍵盤上下左右鍵事件分別觸發(fā)不同的動(dòng)畫。

主要繪制的語(yǔ)句如下:

mHeroAnim[ANIM_DOWN] = new Animation(context,new int []{R.drawable.hero_down_a,R.drawable.hero_down_b,R.drawable.hero_down_c,R.drawable.hero_down_d},true); 
 mHeroAnim[ANIM_LEFT] = new Animation(context,new int []{R.drawable.hero_left_a,R.drawable.hero_left_b,R.drawable.hero_left_c,R.drawable.hero_left_d},true); 
 mHeroAnim[ANIM_RIGHT]= new Animation(context,new int []{R.drawable.hero_right_a,R.drawable.hero_right_b,R.drawable.hero_right_c,R.drawable.hero_right_d},true); 
 mHeroAnim[ANIM_UP] = new Animation(context,new int []{R.drawable.hero_up_a,R.drawable.hero_up_b,R.drawable.hero_up_c,R.drawable.hero_up_d},true); 

三、只提供一張人物圖片,就要采用程序來(lái)切割該圖片,得到動(dòng)畫所需要的幀圖像,

如上圖,這種情況下,可以按照如下步驟,繪制動(dòng)畫:

1、通過(guò)該圖片的寬度和高度,和定義的Tile的寬度和高度,可以切割出12張所需要的幀圖像;
2、根據(jù)人物上下左右行走,可以分為四段動(dòng)畫,可以定義一個(gè)長(zhǎng)度為4的動(dòng)畫數(shù)組;
3、 根據(jù)鍵盤上下左右鍵事件分別觸發(fā)不同的動(dòng)畫;
切割圖片,以及繪制動(dòng)畫的主要代碼如下:

//利用程序來(lái)切割圖片 
Bitmap testmap = ReadBitMap(context,R.drawable.enemy); 
Bitmap [][]bitmap = new Bitmap[ANIM_COUNT][ANIM_COUNT]; 
int tileWidth = testmap.getWidth() / ANIM_COUNT; 
int tileHeight = testmap.getHeight() / ANIM_COUNT; 
int i = 0,x = 0,y = 0; 
for(i =0; i < ANIM_COUNT; i++) { 
y = 0; 
bitmap[ANIM_DOWN][i] = BitmapClipBitmap(testmap,x,y,tileWidth,tileHeight); 
y+=tileHeight; 
bitmap[ANIM_LEFT][i] = BitmapClipBitmap(testmap,x,y,tileWidth,tileHeight); 
y+=tileHeight; 
bitmap[ANIM_RIGHT][i] = BitmapClipBitmap(testmap,x,y,tileWidth,tileHeight); 
y+=tileHeight; 
bitmap[ANIM_UP][i] = BitmapClipBitmap(testmap,x,y,tileWidth,tileHeight);
x+= tileWidth; 
} 
mTestAnim[ANIM_DOWN] = new Animation(context,bitmap[ANIM_DOWN],true);
mTestAnim[ANIM_LEFT] = new Animation(context,bitmap[ANIM_LEFT],true);
mTestAnim[ANIM_RIGHT]= new Animation(context,bitmap[ANIM_RIGHT],true);
mTestAnim[ANIM_UP] = new Animation(context,bitmap[ANIM_UP],true);

注意:以上后面兩種方式分別采用了不同的繪制方法

第一種的繪制構(gòu)造方法為:Animation(Context context, int [] frameBitmapID, boolean isloop);

第二種的繪制構(gòu)造方法為:Animation(Context context, Bitmap [] frameBitmap, boolean isloop);

有了這些準(zhǔn)備條件后,我們可以開(kāi)始真正的繪制:

public void DrawAnimation(Canvas Canvas, Paint paint, int x, int y) { 
 //如果沒(méi)有播放結(jié)束則繼續(xù)播放 
 if (!mIsend) { 
 Canvas.drawBitmap(mframeBitmap[mPlayID], x, y, paint); 
 long time = System.currentTimeMillis(); 
 if (time - mLastPlayTime > ANIM_TIME) { 
 mPlayID++; 
 mLastPlayTime = time; 
 if (mPlayID >= mFrameCount) { 
  //標(biāo)志動(dòng)畫播放結(jié)束 
  mIsend = true; 
  if (mIsLoop) { 
  //設(shè)置循環(huán)播放 
  mIsend = false; 
  mPlayID = 0; 
  } 
 } 
 } 
 } 
}

這里采用了兩個(gè)標(biāo)志位來(lái)判斷動(dòng)畫的狀態(tài),mIsend判斷動(dòng)畫是否播放,true結(jié)束播放,false為播放動(dòng)畫;mIsloop判斷動(dòng)畫是否循環(huán),true為循環(huán),false為不循環(huán);當(dāng)然,動(dòng)畫循環(huán)的時(shí)候,動(dòng)畫肯定是播放的,于是mIsloop為true,則mIsend為false,由于每一組動(dòng)畫都為四張圖片,所以mPlayID最多為4,當(dāng)人物一組動(dòng)作也就是一個(gè)動(dòng)畫完成后,表示4張圖片都繪制了一遍,則要講mPlayID置為0,表示重新開(kāi)始需要繪制四張圖片代表一個(gè)動(dòng)畫。

我們?cè)谥黝愔腥绾瓮ㄟ^(guò)按鍵來(lái)觸發(fā)動(dòng)畫呢?需要通過(guò)實(shí)現(xiàn)onDraw()方法,并且不斷的重繪,主要代碼如下:

protected void onDraw(Canvas canvas) { 
 canvas.drawBitmap(mMapImage, 0,0, mPaint); 
 canvas.save(); 
 canvas.clipRect(0, 0,320, 30); 
 mPaint.setColor(Color.WHITE); 
 canvas.drawRect(0, 0,480, 30, mPaint); 
 mPaint.setColor(Color.RED); 
 canvas.restore(); 
 /**根據(jù)按鍵更新顯示動(dòng)畫**/ 
 if (mAllkeyDown) { 
 if (mIskeyDown) { 
  mAnimationState = ANIM_DOWN; 
  canvas.drawText("按下下鍵,開(kāi)始播放向下動(dòng)畫開(kāi)始", 0, 20, mPaint); 
 } else if (mIskeyLeft) { 
  mAnimationState = ANIM_LEFT; 
  canvas.drawText("按下左鍵,開(kāi)始播放向左動(dòng)畫開(kāi)始", 0, 20, mPaint); 
 } else if (mIskeyRight) { 
  mAnimationState = ANIM_RIGHT; 
  canvas.drawText("按下右鍵,開(kāi)始播放向右動(dòng)畫開(kāi)始", 0, 20, mPaint); 
 } else if (mIskeyUp) { 
  mAnimationState = ANIM_UP; 
  canvas.drawText("按下上鍵,開(kāi)始播放向上動(dòng)畫開(kāi)始", 0, 20, mPaint); 
 } 
 /**繪制主角動(dòng)畫**/ 
 mHeroAnim[mAnimationState].DrawAnimation(canvas, mPaint, 20, 100); 
 mTestAnim[mAnimationState].DrawAnimation(canvas, mPaint, 100, 100); 
 }else { 
 /**按鍵抬起后人物停止動(dòng)畫**/ 
 mHeroAnim[mAnimationState].DrawFrame(canvas, mPaint, 20, 100, 0); 
 mTestAnim[mAnimationState].DrawFrame(canvas, mPaint, 100, 100, 0); 
 canvas.drawText("按鍵已經(jīng)抬起動(dòng)畫停止", 0, 20, mPaint); 
 } 
 super.onDraw(canvas); 
 invalidate(); 
}

這樣,我們的動(dòng)畫繪制時(shí)時(shí)刻刻都在進(jìn)行著。
我們可以通過(guò)控制上下左右按鍵,來(lái)控制標(biāo)志:

public void setKeyState(int keyCode, boolean state) { 
  switch(keyCode) { 
  case KeyEvent.KEYCODE_DPAD_DOWN: 
  mIskeyDown = state; 
  break; 
  case KeyEvent.KEYCODE_DPAD_UP: 
  mIskeyUp = state; 
  break; 
  case KeyEvent.KEYCODE_DPAD_LEFT: 
  mIskeyLeft = state; 
  break; 
  case KeyEvent.KEYCODE_DPAD_RIGHT: 
  mIskeyRight = state; 
  break; 
  } 
  mAllkeyDown = state; 
}

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android ViewGroup事件分發(fā)和處理源碼分析

    Android ViewGroup事件分發(fā)和處理源碼分析

    這篇文章主要為大家介紹了Android ViewGroup事件分發(fā)和處理源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Android開(kāi)發(fā)實(shí)現(xiàn)布局中為控件添加選擇器的方法

    Android開(kāi)發(fā)實(shí)現(xiàn)布局中為控件添加選擇器的方法

    這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)布局中為控件添加選擇器的方法,涉及Android開(kāi)發(fā)中布局設(shè)置的相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Android編程開(kāi)發(fā)錄音和播放錄音簡(jiǎn)單示例

    Android編程開(kāi)發(fā)錄音和播放錄音簡(jiǎn)單示例

    這篇文章主要介紹了Android編程開(kāi)發(fā)錄音和播放錄音的方法,結(jié)合實(shí)例形式分析了Android多媒體開(kāi)發(fā)中音頻操作的相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • Android實(shí)現(xiàn)listview滑動(dòng)時(shí)漸隱漸現(xiàn)頂部欄實(shí)例代碼

    Android實(shí)現(xiàn)listview滑動(dòng)時(shí)漸隱漸現(xiàn)頂部欄實(shí)例代碼

    android中實(shí)現(xiàn)listview滑動(dòng)時(shí)漸隱漸現(xiàn)頂部欄只是在獲取listview的滑動(dòng)距離上可能沒(méi)法直接獲取,需要?jiǎng)討B(tài)的去計(jì)算。感興趣的朋友一起看看吧
    2016-10-10
  • Android使用 Spinner控件實(shí)現(xiàn)下拉框功能

    Android使用 Spinner控件實(shí)現(xiàn)下拉框功能

    Spinner是android的一種控件,用它我們可以實(shí)現(xiàn)下拉框。下面通過(guò)實(shí)例代碼給大家介紹Android使用 Spinner控件實(shí)現(xiàn)下拉框功能,感興趣的朋友一起看看吧
    2018-08-08
  • Android簡(jiǎn)單的利用MediaRecorder進(jìn)行錄音的實(shí)例代碼

    Android簡(jiǎn)單的利用MediaRecorder進(jìn)行錄音的實(shí)例代碼

    MediaRecorder可以進(jìn)行簡(jiǎn)單的錄音,由于操作簡(jiǎn)單所以可以用來(lái)進(jìn)行基本的錄音。下面提供一個(gè)簡(jiǎn)單的例子,記得在Mainfest文件中添加權(quán)限
    2013-08-08
  • 最新評(píng)論

    凤山县| 弥勒县| 庆云县| 土默特右旗| 南通市| 靖边县| 格尔木市| 墨竹工卡县| 安龙县| 乌鲁木齐县| 延寿县| 普定县| 和龙市| 时尚| 武汉市| 临高县| 游戏| 朝阳区| 临邑县| 奇台县| 铜陵市| 多伦县| 广灵县| 区。| 大宁县| 雷山县| 普陀区| 凌海市| 辰溪县| 龙州县| 铜鼓县| 肇庆市| 蓬安县| 景洪市| 昔阳县| 封丘县| 玉环县| 阿克| 墨竹工卡县| 应用必备| 建昌县|