Android动画-旋转、平移、放缩和渐变

转载:http://yidongkaifa.iteye.com/blog/1788996

Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。
下面就讲一下Tweene Animations。
主要类:
Animation  动画
AlphaAnimation 渐变透明度
RotateAnimation 画面旋转
ScaleAnimation 渐变尺寸缩放
TranslateAnimation 位置移动
AnimationSet 动画集

一.AlphaAnimation
其中AlphaAnimation类第一个参数fromAlpha表示动画起始时的透明度, 第二个参数toAlpha表示动画结束时的透明度。
setDuration用来设置动画持续时间。

二.RotateAnimation
其中RotateAnimation类第一个参数fromDegrees表示动画起始时的角度, 第二个参数toDegrees表示动画结束时的角度。
另外还可以设置伸缩模式pivotXType、pivotYType, 伸缩动画相对于x,y 坐标的开始位置pivotXValue、pivotYValue等。

三.ScaleAnimation
ScaleAnimation类中
第一个参数fromX ,第二个参数toX:分别是动画起始、结束时X坐标上的伸缩尺寸。
第三个参数fromY ,第四个参数toY:分别是动画起始、结束时Y坐标上的伸缩尺寸。
另外还可以设置伸缩模式pivotXType、pivotYType, 伸缩动画相对于x,y 坐标的开始位置pivotXValue、pivotYValue等。

四.TranslateAnimation
第一个参数fromXDelta ,第二个参数toXDelta:分别是动画起始、结束时X坐标。
第三个参数fromYDelta,第四个参数toYDelta:分别是动画起始、结束时Y坐标。

java代码:

public class Animations_Activity extends Activity {  
    private Button button1;  
    private Button button2;  
    private Button button3;  
    private Button button4;  
    private Button button5;  
    private ImageView imageView;  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_animations_);  
        button1=(Button)findViewById(R.id.button_alpha);  
        button2=(Button)findViewById(R.id.button_rotate);  
        button3=(Button)findViewById(R.id.button_scale);  
        button4=(Button)findViewById(R.id.button_translate);  
        button5=(Button)findViewById(R.id.button_alpha_translate);  
        imageView=(ImageView)findViewById(R.id.imageview);  
        button1.setOnClickListener(new MyButton());  
        button2.setOnClickListener(new MyButton());  
        button3.setOnClickListener(new MyButton());  
        button4.setOnClickListener(new MyButton());  
        button5.setOnClickListener(new MyButton());  
    }  
    class MyButton implements OnClickListener{  

        @Override  
        public void onClick(View arg0) {  
            // TODO Auto-generated method stub  
            switch (arg0.getId()) {  
            case R.id.button_alpha:  
                Alpha();  
                break;  
            case R.id.button_rotate:  
                Rotata();  
                break;  
            case R.id.button_scale:  
                Scale();  
                break;  
            case R.id.button_translate:  
                Translate();  
                break;  
            case R.id.button_alpha_translate:  
                Alpha_Translate();  
                break;  

            default:  
                break;  
            }  
        }  

    }  

    /* 
     * 1.创建一个AnimationSet对象,该对象存储的是动画的集合 
     * 2.根据需要创建相应的Animation对象 
     * 3.根据动画的需求,为Animation对象设置相应的数据(即执行效果) 
     * 4.奖Animation对象添加到AnimationSet对象当中 
     * 5.使用控件对象开始执行AnimationSet 
     */  
    public void Alpha() {  
        AnimationSet animationSet=new AnimationSet(true);  
        AlphaAnimation alphaAnimation=new AlphaAnimation(1, 0);  
        alphaAnimation.setDuration(2000);  
        animationSet.addAnimation(alphaAnimation);  
        imageView.startAnimation(animationSet);  
    }  
    public void Rotata(){  
        AnimationSet animationSet=new AnimationSet(true);  
        //后面的四个参数定义的是旋转的圆心位置  
        RotateAnimation rotateAnimation=new RotateAnimation(  
                0, 360,   
                Animation.RELATIVE_TO_PARENT, 1f,  
                Animation.RELATIVE_TO_PARENT, 0f);  
        rotateAnimation.setDuration(2000);  
        animationSet.addAnimation(rotateAnimation);  
        imageView.startAnimation(animationSet);  
    }  
    public void Scale() {  
        AnimationSet animationSet=new AnimationSet(true);  
        ScaleAnimation scaleAnimation=new ScaleAnimation(  
                1, 0.1f, 1, 0.1f,   
                Animation.RELATIVE_TO_SELF, 0.5f,   
                Animation.RELATIVE_TO_SELF, 0.5f);  
        scaleAnimation.setDuration(2000);  
        animationSet.addAnimation(scaleAnimation);  
        imageView.startAnimation(scaleAnimation);  
    }  
    public void Translate() {  
        AnimationSet animationSet=new AnimationSet(true);  
        TranslateAnimation translateAnimation=new TranslateAnimation(  
                Animation.RELATIVE_TO_SELF, 0f,  //X轴的开始位置  
                Animation.RELATIVE_TO_SELF, 0.5f,  //X轴的结束位置  
                Animation.RELATIVE_TO_SELF, 0f,  //Y轴的开始位置  
                Animation.RELATIVE_TO_SELF, 1.0f);  //Y轴的结束位置  
        translateAnimation.setDuration(2000);  
        animationSet.addAnimation(translateAnimation);  

        /* 
         * 第一行的设置如果为true,则动画执行完之后效果定格在执行完之后的状态 
         * 第二行的设置如果为false,则动画执行完之后效果定格在执行完之后的状态 
         * 第三行设置的是一个long类型的值,是指动画延迟多少毫秒之后执行 
         * 第四行定义的是动画重复几次执行 
         */  
        animationSet.setFillAfter(true);  
        animationSet.setFillBefore(false);  
        animationSet.setStartOffset(2000);  
        animationSet.setRepeatCount(3);  

        imageView.startAnimation(animationSet);  
    }  
    public void Alpha_Translate() {  
        AnimationSet animationSet=new AnimationSet(true);  
        AlphaAnimation alphaAnimation=new AlphaAnimation(1, 0);  
        alphaAnimation.setDuration(2000);  
        animationSet.addAnimation(alphaAnimation);  
        TranslateAnimation translateAnimation=new TranslateAnimation(  
                Animation.RELATIVE_TO_SELF, 0f,  //X轴的开始位置  
                Animation.RELATIVE_TO_SELF, 0.5f,  //X轴的结束位置  
                Animation.RELATIVE_TO_SELF, 0f,  //Y轴的开始位置  
                Animation.RELATIVE_TO_SELF, 1.0f);  //Y轴的结束位置  
        translateAnimation.setDuration(2000);  
        animationSet.addAnimation(translateAnimation);  
        imageView.startAnimation(animationSet);  
    }  

    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.activity_animations_, menu);  
        return true;  
    }  

}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值