我看了一下官方文檔沽一,但是無奈我的理解能力不夠好,跑了好多次還是看不見炫酷的動畫效果,無奈只好去翻閱官方demo的源碼沉噩,終于知道了怎么使用。
Touch Feedback(觸摸反饋)
在XML文件中添加以下代碼可以添加觸摸反饋的動畫效果(類似于漣漪的效果)
- ?android:attr/selectableItemBackground(有邊界柱蟀,可以使用在listview的item上)
-
?android:attr/selectableItemBackgroundBorderless(沒有邊界川蒙,或者直接看是看不到明顯的邊界,但是點(diǎn)擊是有漣漪效果)
需要說明android:attr/selectableItemBackgroundBorderless是API 21新增加的**
Circular Reveal
這個主要是提供一個圓形的顯示或者隱藏的動畫效果长已,主要使用的api是[ViewAnimationUtils.createCircularReveal()](http://developer.android.com/reference/android/view/ViewAnimationUtils.html#createCircularReveal(android.view.View, int, int, float, float)
// previously invisible view
View myView = findViewById(R.id.my_view);
// get the center for the clipping circle
int cx = (myView.getLeft() + myView.getRight()) / 2;
int cy = (myView.getTop() + myView.getBottom()) / 2;
// get the final radius for the clipping circle
int finalRadius = Math.max(myView.getWidth(), myView.getHeight());
// create the animator for this view (the start radius is zero)
Animator anim =
ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);
// make the view visible and start the animation
myView.setVisibility(View.VISIBLE);
anim.start();
里面幾個參數(shù)的意思分別為:
- myView 要展示動畫效果的視圖
- cx 動畫開始的X坐標(biāo)
- cy 動畫開始的Y坐標(biāo)
- startRadius 動畫開始的角度
- finalRadius 動畫結(jié)束的角度
Activity Transitions
關(guān)于這個我就?不多寫了畜眨,博主大苞米對于這個寫的十分詳細(xì),給大家附上鏈接自己看一下,我就?Activity之間的視圖共享寫一下术瓮,因?yàn)槲以谶@個地方花了一些時間康聂,所以記下來以備后面忘記。
首先需要在XML文件中你需要共享的View定義一個android:transitionName
<ImageView
android:id="@+id/bookPage"
android:layout_width="match_parent"
android:layout_height="400dp"
android:scaleType="centerCrop"
android:tint="@color/photo_tint"
android:transitionName="bookPage" />
然后可以定義動畫效果:
1.可以在style文件中定義
<item name="android:windowContentTransitions">true</item>
<item name="android:windowEnterTransition">@transition/explode</item>
<item name="android:windowExitTransition">@transition/explode</item>
2.可以在java文件中定義
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setExitTransition(new Explode());
然后在使用Intent跳轉(zhuǎn)的時候胞四,加入ActivityOptions
Intent intent = new Intent(this, Activity2.class);
// shareView: 需要共享的視圖
// bookPage就是剛剛 transitionName所寫的值
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation(this, shareView, "bookPage");
startActivity(intent, options.toBundle());
對于一次共享多個View的需要使用Pair.create(view,"shareName")早抠,這里必須是View。
關(guān)于結(jié)束Activity時同樣動畫效果倒回可以使用Activity.finishAfterTransition()撬讽。
添加TranstionListener
同樣你可以在進(jìn)入動畫時候添加動畫監(jiān)聽器,這樣你就可以在本頁面加載更多的動畫效果
getWindow().getEnterTransition().addListener(new TransitionAdapter() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onTransitionEnd(Transition transition) {
ObjectAnimator color = ObjectAnimator.ofArgb(bookPage.getDrawable(), "tint",
getResources().getColor(R.color.photo_tint), 0);
color.start();
renewButton.animate().scaleX(1.0f);
renewButton.animate().scaleY(1.0f);
renewButton.animate().alpha(1.0f);
getWindow().getEnterTransition().removeListener(this);
}
});
關(guān)閉Activity時同樣可以使用悬垃,需要重寫onBackPressed()方法:
@Override
public void onBackPressed() {
super.onBackPressed();
if (Build.VERSION.SDK_INT == 21) {
ObjectAnimator color = ObjectAnimator.ofArgb(bookPage.getDrawable(), "tint",
0, getResources().getColor(R.color.photo_tint));
color.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
finishAfterTransition();
}
});
color.start();
renewButton.animate().scaleX(0.0f);
renewButton.animate().scaleY(0.0f);
renewButton.animate().alpha(0.0f);
finishAfterTransition();
}
}