完成以下文件:
* src/CrossfadeActivity.java
* layout/activity_crossfade.xml
* menu/activity_crossfade.xml
创建视图
创建两个视图要淡入淡出,下面的示例创建进度指示器和一个可滚动的文本视图:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingMultiplier="1.2"
android:text="@string/text"
style="?android:textAppearanceMedium"
android:padding="16dp"/>
</ScrollView>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/loading_spinner"
android:layout_gravity="center"
style="?android:progressBarStyleLarge"/>
</FrameLayout>
建立动画
- 为要交叉衰减的意见创建成员变量。修改动画中的观点,当你需要这些引用更高版本。
- 对于正在消失的视图,将其可见性GONE。这防止view占用布局空间所以从计算中省略它,加快处理。
- 缓存config_shortAnimTime 中的成员变量系统属性。此属性为动画标准“短”的持续时间。这个时间是理想的发生非常频繁微妙的动画或动画。config_longAnimTime而和config_mediumAnimTime如果你想使用它们也是可用的。
public class CrossfadeActivity extends AppCompatActivity {
private View mContentView;
private View mLoadinbgView;
//段动画
private int mShortAnimationDuration;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crossfade);
mContentView = findViewById(R.id.content);
mLoadinbgView = findViewById(R.id.loading_spinner);
//最初隐藏内容视图
mContentView.setVisibility(View.GONE);
//检索和缓存系统默认的"短"动画时间
mShortAnimationDuration = getResources().getInteger(android.R.integer.config_shortAnimTime);
}
}
浅入浅出的视图
private void crossfade(){
//将内容视图设置为0%的不透明度,但可见,因此动画中可见(但完全透明)。
mContentView.setAlpha(0f);
mContentView.setVisibility(View.VISIBLE);
//将内容视图动画为100%的不透明度,并清除视图上设置的任何动画监听器。
mContentView.animate().alpha(1f)
.setDuration(mShortAnimationDuration)
.setListener(null);
//动画加载视图为0%不透明。动画结束后
// ,设置它的可见性为GONE作为优化步骤(它不会参与布局流程等)
mLoadinbgView.animate().alpha(0f)
.setDuration(mShortAnimationDuration)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
mLoadinbgView.setVisibility(View.GONE);
}
});
}
添加菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_crossfade,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.activity_crossfade:
crossfade();
break;
}
return true;
}