package zy.qiufo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; import android.view.WindowManager; public class QiuQianAnimationView extends View { private Bitmap[] m_animationPics; private int m_CurPic=0; private int m_iDevWidth = 0; private int m_iDevHeight = 0; private boolean m_bStartAnimation = false; private QiufoActivity m_mainActivity; public QiuQianAnimationView(Context context) { super(context); //initPic(); // TODO Auto-generated constructor stub } public QiuQianAnimationView(Context context, AttributeSet attrs) { super(context,attrs); initPic(); m_mainActivity = (QiufoActivity)context; WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); m_iDevWidth = wm.getDefaultDisplay().getWidth(); m_iDevHeight = wm.getDefaultDisplay().getHeight(); } protected void initPic() { m_animationPics = new Bitmap[10]; m_animationPics[0] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian); m_animationPics[1] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian_left_01); m_animationPics[2] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian_left_02); m_animationPics[3] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian_right_01); m_animationPics[4] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian_right_02); m_animationPics[5] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian_left_01); m_animationPics[6] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian_left_02); m_animationPics[7] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian_right_01); m_animationPics[8] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian_right_02); m_animationPics[9] = BitmapFactory.decodeResource(getResources(), R.drawable.qiuqian_result); } @Override protected void onDraw(Canvas canvas) { if (m_bStartAnimation) { if (m_CurPic < 10) { int iBgX = m_iDevWidth/2 - m_animationPics[m_CurPic].getWidth()/2; int iBgY = m_iDevHeight/2 - m_animationPics[m_CurPic].getHeight()/2; canvas.drawBitmap(m_animationPics[m_CurPic],iBgX,iBgY, null); m_CurPic++; this.postInvalidateDelayed(500); } else { int iBgX = m_iDevWidth/2 - m_animationPics[9].getWidth()/2; int iBgY = m_iDevHeight/2 - m_animationPics[9].getHeight()/2; canvas.drawBitmap(m_animationPics[9],iBgX,iBgY, null); m_bStartAnimation = false; } } else { if(m_CurPic == 0) { int iBgX = m_iDevWidth/2 - m_animationPics[0].getWidth()/2; int iBgY = m_iDevHeight/2 - m_animationPics[0].getHeight()/2; canvas.drawBitmap(m_animationPics[0],iBgX,iBgY, null); } else { int iBgX = m_iDevWidth/2 - m_animationPics[9].getWidth()/2; int iBgY = m_iDevHeight/2 - m_animationPics[9].getHeight()/2; canvas.drawBitmap(m_animationPics[9],iBgX,iBgY, null); } } } public void startDraw() { m_CurPic = 0; m_bStartAnimation = true; this.postInvalidate(); } public void stopDraw() { } }
上面的view类利用postInvalidate来不断刷新自身,刷新时调用ondraw重绘,重绘时根据情况绘制不同的图片到屏幕中央,形成动画(类似逐帧动画)
在activity中放入上述view:
<FrameLayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
<ImageView
android:src="@drawable/gmfou"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:scaleType="fitXY"
android:id="@+id/iv_fo"/>
<zy.qiufo.QiuQianAnimationView
android:id="@+id/vw_animationPic"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>
</FrameLayout>