Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android動畫Animation

android動畫Animation

編輯:關於Android編程

首先我們要知道一共有哪幾種動畫,這個面試有可能被問哦^_^。

變換動畫(透明度、縮放、平移、旋轉)、逐幀動畫、布局動畫和屬性動畫

一、變換動畫

我們可以通過XML文件設置動畫也可以通過java代碼設置動畫,當動畫的狀態是動態獲取的,就是比較靈活的時候,我們選java代碼的,否則選擇XML的更加方便。

1、透明度

1)通過xml文件設置

alphademo.xml(在res/anim文件夾下)




啟動的代碼還是一樣的

 Animation animation = AnimationUtils.loadAnimation(this,R.anim.rotatedemo);
 imageView.startAnimation(animation);
2)java代碼實現
RotateAnimation rotateAnimation = new RotateAnimation(0f,-30f);
rotateAnimation.setDuration(2000);
rotateAnimation.setFillAfter(true);
imageView.startAnimation(rotateAnimation);

5、每種動畫都會了,來一個組合的吧

RotateAnimation rotateAnimation = new RotateAnimation(0f, -30f,0.5f,0.5f);
        rotateAnimation.setDuration(2000);
        rotateAnimation.setFillAfter(true);
        //設置啟動的時間
//        rotateAnimation.setStartOffset(2000);
        imageView.startAnimation(rotateAnimation);
        rotateAnimation.setAnimationListener(new Animation.AnimationListener() {
            //動畫開始的時候執行
            @Override
            public void onAnimationStart(Animation animation) {

            }
            //動畫結束後執行
            @Override
            public void onAnimationEnd(Animation animation) {
                TranslateAnimation translateAnimation = new TranslateAnimation(0f, 200f, 0f, 50f);
                translateAnimation.setFillAfter(true);
                translateAnimation.setDuration(3000);
                imageView.startAnimation(translateAnimation);
            }
            //動畫重復的時候執行
            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

參考的

這裡寫圖片描述

6、我們可能會有這樣的需求:多個動畫同時執行

1)xml文件方式

togeranimation.xml




    
    

啟動的方式還是一樣的

 Animation animation = AnimationUtils.loadAnimation(this,R.anim.togeranimation);
imageView.startAnimation(animation);

2)使用java代碼有些不同

        AnimationSet animationSet = new AnimationSet(true);
        TranslateAnimation translateAnimation = new TranslateAnimation(0f, 200f, 0f, 50f);
        translateAnimation.setDuration(3000);
        //一定要把動畫添加到動畫集中
        animationSet.addAnimation(translateAnimation);

        RotateAnimation rotateAnimation = new RotateAnimation(0f, -30f,0.5f,0.5f);
        rotateAnimation.setDuration(2000);
        animationSet.addAnimation(rotateAnimation);
        //啟動方式一樣,只不過傳入的是AnimationSet對象了
        imageView.startAnimation(animationSet);

二、幀動畫

與上面那種動畫不同的是,xml文件放到了drawable文件夾下

animation.xml

注意哦這裡的根元素是animation-list ,子元素是item



    
    
    
    
    
    
    

接下來就是java代碼了

public class Animationtoger extends AppCompatActivity {

    private AnimationDrawable animationDrawable = null;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animationtoger);
        imageView = (ImageView) findViewById(image_view);
        //初始化AnimationDrawable
        animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.animation);
        //將imageView的背景設置為AnimationDrawable
        imageView.setBackground(animationDrawable);

    }
    public void startAnimation(View view){
        //開啟動畫,停止用stop
        animationDrawable.start();
    }
}

三、布局動畫

我這裡面實現的效果是,ListView中每個條目一次從右滑出並可見。
布局動畫使用的是LayoutAnimationController,它是用於為一個layout裡面的控件,或者是一個ViewGroup裡面的控件設置動畫效果。

public class LayoutAnimationActivity extends AppCompatActivity {

    private ListView listView;
    private List list;
    private ArrayAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout_animation);
        listView = (ListView) findViewById(R.id.listview);

        list = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            list.add("你好黑啊+" + i);
        }
        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);
        AnimationSet set = new AnimationSet(true);

        Animation animation = new AlphaAnimation(0.0f, 1.0f);
        animation.setDuration(2000);
        set.addAnimation(animation);

        animation = new TranslateAnimation(100f,10f,0,0);
        animation.setDuration(2000);
        set.addAnimation(animation);
        //得到布局動畫控制器
        LayoutAnimationController layoutAnimationController = new LayoutAnimationController(set);
//設置控件顯示的順序
             layoutAnimationController.setOrder(LayoutAnimationController.ORDER_NORMAL);
        listView.setLayoutAnimation(layoutAnimationController);
        //寫不寫都可以,不寫也會出現同樣的效果
        listView.startLayoutAnimation();

    }
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved