当前位置: 首页 > 工具软件 > Tween > 使用案例 >

Tween动画java

祖浩淼
2023-12-01


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

}

 类似资料: