import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.view.KeyEvent; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; /** * @version 2012-8-16 下午02:25:19 **/ public class GameView extends View { // 渐变透明 private Animation mAnimationAlpha = null; // 渐变尺寸伸缩 private Animation mAnimationScale = null; // 渐变位置移动 private Animation mAnimationTranslate = null; // 渐变画面旋转 private Animation mAnimationRotate = null; Bitmap bitmap = null; public GameView(Context context) { super(context); bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.icon)) .getBitmap(); // 设置焦点 就可以使用onKeyDown setFocusable(true); // Duration[long] // 属性为动画持续时间 时间以毫秒为单位 // fillAfter [boolean] // 当设置为true ,该动画转化在动画结束后被应用 // fillBefore[boolean] // 当设置为true ,该动画转化在动画开始前被应用 // interpolator // 指定一个动画的插入器 有一些常见的插入器 // accelerate_decelerate_interpolator // 加速-减速 动画插入器 // accelerate_interpolator // 加速-动画插入器 // decelerate_interpolator // 减速- 动画插入器 // 其他的属于特定的动画效果 // repeatCount[int] 动画的重复次数 // RepeatMode[int] 定义重复的行为 1:重新开始 2:plays backward // startOffset[long] 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画 // zAdjustment[int] 定义动画的Z Order的改变 0:保持Z Order不变 // 1:保持在最上层 // -1:保持在最下层 } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch(keyCode) { case KeyEvent.KEYCODE_DPAD_UP: // 创建渐变透明动画 0.0表示完全透明,1.0表示完全不透明 // fromAlpha起始透明度, toAlpha起始透明度结束透明度 mAnimationAlpha = new AlphaAnimation(1.0f, 0.0f); mAnimationAlpha.setFillAfter(true); // 设置动画时长 mAnimationAlpha.setDuration(3000); startAnimation(mAnimationAlpha); break; case KeyEvent.KEYCODE_DPAD_DOWN: // 渐变尺寸伸缩 // fromX 起始X坐标上的伸缩尺寸 值 0-1 // toX 结束X坐标上的伸缩尺寸。值 0-1 // fromY 起始Y坐标上的伸缩尺寸。值 0-1 // toY 结束Y坐标上的伸缩尺寸。值 0-1 // pivotXType,X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT // pivotXValue,X坐标的伸缩值。 // 动画的起始X坐标, // 当pivotXType为ABSOLUTE时pivotXValue表示为绝对像素坐标位置 // RELATIVE_TO_SELFf表示相对自身值为0-1 // RELATIVE_TO_PARENT表示相对父窗口值为0-1 // pivotYType,Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT // pivotYValueY坐标的伸缩值。动画的起始Y坐标 mAnimationScale = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 设置动画时长 mAnimationScale.setDuration(500); startAnimation(mAnimationScale); break; case KeyEvent.KEYCODE_DPAD_LEFT: // fromXDelta开始的X坐标 // toXDelta结束的X坐标 // fromYDelta开始的Y坐标 // toYDelta结束的Y坐标 mAnimationTranslate = new TranslateAnimation(10, 100, 10, 100); // 设置动画时长 mAnimationTranslate.setDuration(1000); startAnimation(mAnimationTranslate); break; case KeyEvent.KEYCODE_DPAD_RIGHT: // fromDegrees开始角度 // (负的度数表示逆时针角度,比如fromDegrees // =180,toDegrees=-360则开始帧位置是图像绕圆心顺时针转180度,逆时针旋转至540度) // toDegrees结束角度 // pivotXType圆心X坐标类型 // pivotXValue圆心X坐标 // pivotYType圆心Y坐标类型 // pivotYValue圆心Y坐标 mAnimationRotate = new RotateAnimation(0.0f, +360.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); // 设置动画时长 mAnimationRotate.setDuration(1000); startAnimation(mAnimationRotate); break; } return true; } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawBitmap(bitmap, 0, 0, null); } }