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);
}
}