Android 動畫詳解之屬性動畫(Property Animation)(下)

來源:互聯網
上載者:User

Android 動畫詳解之屬性動畫(Property Animation)(下)

Hello,大家好,最近好長時間沒有寫部落格了,因為我決定辭職了。

廢話不多說,我們還是來看屬性動畫在上一篇 Android 動畫詳解之屬性動畫(Property Animation)中我們簡單的介紹了一下屬性動畫的用法,其實屬性動畫還有更多有趣的用法。

1,在xml中使用

在eclipse中我們右鍵建立xml可以選擇建立屬性動畫,

vcrsz6S1xNK7xLs8L3A+CjxwPjxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20141202/20141202081511156.png" alt="\">

然後我們用智能提示就可以看到更熟悉的


沒錯,這下我們應該知道怎麼用xml布局來寫屬性動畫了吧



protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_animation);button = (Button) findViewById(R.id.btn_anim);button.setOnClickListener(new OnClickListener() {@SuppressLint("NewApi")@Overridepublic void onClick(View v) {Animator animator = AnimatorInflater.loadAnimator(AnimationActivity.this, R.animator.animation);animator.setTarget(button);animator.start();}});}
效果

同時我們可以看到在建立xml的時候是有set的,set的用法同樣很簡單

        

2,布局動畫

當容器中的視圖層次發生變化時存在過渡的動畫效果,這個我們先來看看ApiDemo的效果。


可以看到我們勾選了in於out之後我們新增的button或者remove掉的button會有一個動畫效果,接下來我們來看代碼

 // Check for disabled animations        CheckBox appearingCB = (CheckBox) findViewById(R.id.appearingCB);        appearingCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                setupTransition(transitioner);            }        });        CheckBox disappearingCB = (CheckBox) findViewById(R.id.disappearingCB);        disappearingCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                setupTransition(transitioner);            }        });

這是倆個checkbox,我們再看setupTransition方法

private void setupTransition(LayoutTransition transition) {        CheckBox customAnimCB = (CheckBox) findViewById(R.id.customAnimCB);        CheckBox appearingCB = (CheckBox) findViewById(R.id.appearingCB);        CheckBox disappearingCB = (CheckBox) findViewById(R.id.disappearingCB);        CheckBox changingAppearingCB = (CheckBox) findViewById(R.id.changingAppearingCB);        CheckBox changingDisappearingCB = (CheckBox) findViewById(R.id.changingDisappearingCB);        transition.setAnimator(LayoutTransition.APPEARING, appearingCB.isChecked() ?                (customAnimCB.isChecked() ? customAppearingAnim : defaultAppearingAnim) : null);        transition.setAnimator(LayoutTransition.DISAPPEARING, disappearingCB.isChecked() ?                (customAnimCB.isChecked() ? customDisappearingAnim : defaultDisappearingAnim) : null);        transition.setAnimator(LayoutTransition.CHANGE_APPEARING, changingAppearingCB.isChecked() ?                (customAnimCB.isChecked() ? customChangingAppearingAnim :                        defaultChangingAppearingAnim) : null);        transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING,                changingDisappearingCB.isChecked() ?                (customAnimCB.isChecked() ? customChangingDisappearingAnim :                        defaultChangingDisappearingAnim) : null);    }

我們可以發現關鍵就是LayoutTransition,而且動畫產生也是依據

LayoutTransition.APPEARING;

LayoutTransition.DISAPPEARING;

LayoutTransition.CHANGE_APPEARING;

LayoutTransition.CHANGE_DISAPPEARING;

APPEARING新增view的動畫CHANGE_APPEARING對布局產生改變的動畫,那麼我們就可以依葫蘆畫瓢。


 private RelativeLayout relativeLayout;   private Button mAdbtn;   private int count = 0;@SuppressLint("NewApi") protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_animation);relativeLayout = (RelativeLayout)findViewById(R.id.relative);mAdbtn = (Button)findViewById(R.id.btn);final GridLayout gridLayout = new GridLayout(this);gridLayout.setColumnCount(5);relativeLayout.addView(gridLayout);gridLayout.setLayoutTransition(new LayoutTransition());mAdbtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {count++;               Button button = new Button(AnimationActivity.this);               button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {                gridLayout.removeView(v);}});               button.setText("btn"+count);               gridLayout.addView(button);}});}
效果


同時如果我們不喜歡預設的動畫效果也可以替換為自己喜歡的效果。


mAdbtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {count++;Button button = new Button(AnimationActivity.this);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {gridLayout.removeView(v);}});button.setText("btn" + count);layoutTransition.setAnimator(LayoutTransition.APPEARING,ObjectAnimator.ofFloat(button, "RotationX", 0, 360).setDuration(2000));gridLayout.setLayoutTransition(layoutTransition);gridLayout.addView(button);}});

ok,屬性動畫就介紹到這裡吧,也預祝大家都工作順利天天開心


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.