Android 动画(三)--属性动画
生活随笔
收集整理的這篇文章主要介紹了
Android 动画(三)--属性动画
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Android Developer URL:http://developer.android.com/guide/topics/graphics/prop-animation.html
詳細(xì)細(xì)節(jié)請(qǐng)參考上文
1》布局文件activity_main.xml,代碼如下(很簡(jiǎn)單只有一個(gè)按鈕而已):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/rootRelativeLayout"android:layout_width="match_parent"android:layout_height="match_parent" ><Buttonandroid:id="@+id/start_btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Start" /></RelativeLayout>2》動(dòng)畫(huà)更新的監(jiān)聽(tīng)器
package com.demo.animationlistener;import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.util.Log; import android.view.View;public class AnimatorUpdateListenerClass implements AnimatorUpdateListener {private View view;public AnimatorUpdateListenerClass() {// TODO Auto-generated constructor stub}public AnimatorUpdateListenerClass(View view) {// TODO Auto-generated constructor stubthis.view = view;}@Overridepublic void onAnimationUpdate(ValueAnimator animation) {// TODO Auto-generated method stubview.setTranslationY((Float) animation.getAnimatedValue());Log.i("CXC", "###onAnimationUpdate()--getAnimatedValue():"+ (Float) animation.getAnimatedValue());}}
3》監(jiān)聽(tīng)動(dòng)畫(huà)行為的監(jiān)聽(tīng)器
package com.demo.animationlistener;import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener;/*** 動(dòng)畫(huà)監(jiān)聽(tīng)器類* */ @SuppressLint("NewApi") public class AnimatorListenerClass implements AnimatorListener {private View view;public AnimatorListenerClass() {// TODO Auto-generated constructor stub}public AnimatorListenerClass(View view) {// TODO Auto-generated constructor stubthis.view = view;}@Overridepublic void onAnimationEnd(Animator animation) {// TODO Auto-generated method stubLog.i("CXC", "---onAnimationEnd+++++");// 得到該控件的父控件ViewGroup parentViewGroup = (ViewGroup) view.getParent();if (parentViewGroup != null) {// 從父控件中刪除該控件parentViewGroup.removeView(view);Log.i("CXC", "----delete view from parent success ++++");}}@Overridepublic void onAnimationCancel(Animator animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animator animation) {// TODO Auto-generated method stubLog.i("CXC", "---onAnimationRepeat++++");}@Overridepublic void onAnimationStart(Animator animation) {// TODO Auto-generated method stubLog.i("CXC", "---onAnimationStart++++");view.setVisibility(View.VISIBLE);}}
4》MainActivity.java
package com.demo.activity;import com.demo.animationlistener.AnimatorListenerClass; import com.demo.animationlistener.AnimatorUpdateListenerClass; import com.demo.animationtest.R; import com.demo.animationtest.R.color;import android.animation.ValueAnimator; import android.app.ActionBar.LayoutParams; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.LinearInterpolator; import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout;public class MainActivity extends Activity {// 聲明控件private ViewGroup rootViewGroup;private Button start_btn;// 手機(jī)屏幕大小private float mWindowHeight;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}// 初始化操作private void init() {// 得到控件rootViewGroup = (ViewGroup) findViewById(R.id.rootRelativeLayout);start_btn = (Button) findViewById(R.id.start_btn);mWindowHeight = getWindowManager().getDefaultDisplay().getHeight();Log.i("CXC", "----mWindowHeight:" + mWindowHeight);// 設(shè)置動(dòng)畫(huà)的刷新時(shí)間--不一定嚴(yán)格按指定的時(shí)間做。ValueAnimator.setFrameDelay(200L);// 注冊(cè)事件start_btn.setOnClickListener(myButtOnClickListener);}OnClickListener myButtOnClickListener = new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubLog.i("CXC", "myButtonClickListener--click");switch (v.getId()) {case R.id.start_btn:startButtonClick();break;default:break;}}};// Just for testint index = 0;public void startButtonClick() {ImageView s7_iv = new ImageView(getApplicationContext());switch (index % 3) {case 0:s7_iv.setBackgroundColor(Color.parseColor("#ff0000"));break;case 1:s7_iv.setBackgroundColor(Color.parseColor("#00ff00"));break;case 2:s7_iv.setBackgroundColor(Color.parseColor("#0000ff"));break;default:break;}index++;// s7_iv.setBackgroundColor(Color.parseColor("#ff0000"));s7_iv.setVisibility(View.GONE);// 將該view設(shè)置為在其父布局中水平居中RelativeLayout.LayoutParams imgViewLayoutParams = new RelativeLayout.LayoutParams(40, 300);imgViewLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);// 將創(chuàng)建的控件添加到Activity中rootViewGroup.addView(s7_iv, imgViewLayoutParams);// 指定垂直移動(dòng)的范圍ValueAnimator mValueAnimator = ValueAnimator.ofFloat(0,mWindowHeight - 500);// 線性變化,即勻速mValueAnimator.setInterpolator(new LinearInterpolator());Log.i("CXC", "----s7_iv.getHeight:" + s7_iv.getHeight());mValueAnimator.setTarget(s7_iv);mValueAnimator.addListener(new AnimatorListenerClass(s7_iv));mValueAnimator.addUpdateListener(new AnimatorUpdateListenerClass(s7_iv));mValueAnimator.setDuration(5000).start();} }
5》運(yùn)行效果:
6》log如下:
總結(jié)
以上是生活随笔為你收集整理的Android 动画(三)--属性动画的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android 动画(二)
- 下一篇: Android sdk Drow9pat