//主页,涵盖三个动画功能点击事件,分别跳转:startActivity(new Intent(this, XXXActivity.class));
//一、揭露动画:RevealActivity ,由 CheckBox+View+Button 组成 ,
// Animator animator = viewanimationutils.createcircularreceal() 静态方法。
//二、多视图转场:SceneActivity transition.xml FrameLayout ViewGroup Scene
// TransitionManager.go TransitionInflater.from和inflateTransition
//三、Activity间的转场动画 两个activity都是extends Activity 作用:点击小图看大图
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnReveal:
startActivity(new Intent(this, RevealActivity.class));
break;
case R.id.btnScene:
startActivity(new Intent(this, SceneActivity.class));
break;
case R.id.btnActivity:
startActivity(new Intent(this, FirstActivity.class));
break;
}
}
}
//揭露动画,该页面由 CheckBox+View+Button 组成
// View 的显示属性 android:visibility="invisible"
// Button 的风格属性 style="?android:buttonBarButtonStyle" 按钮栏按钮样式
// Animator animator = viewanimationutils.createcircularreceal() 静态方法设置属性参数
//onClick方法里有个自定义方法,这个方法里有两个自定义方法。用Boolean类型来处理选中和未选择情况的操作。
//要判断用户能否看见某个view,应使用 isShown()
//自定义揭露动画播放开始,设置播放属性,可见性为可见;
//自定义揭露动画退出方法,起始位置和终止位置改一下,设置监听,监听动画的开始、重复、和结束。
// animator.addListener(new AnimatorListenerAdapter() {可见性为不可见}
public class RevealActivity extends AppCompatActivity {
private static final String TAG = "RevealActivity";
private View mView;
private CheckBox mPlayAnimationCheckBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reveal);
//实例化view和CheckBox对象
mView = findViewById(R.id.view);
mPlayAnimationCheckBox = (CheckBox) findViewById(R.id.checkBox);
}
//button点击事件来开启动画,但是受到CheckBox的Boolean值限制。
public void onClick(View view) {
//取值,总开关
final boolean playAnimation = mPlayAnimationCheckBox.isChecked();
//点击事件,动画开启开关
switch (view.getId()) {
case R.id.buttonChangeVisibility:
//处理更改可见性,调用自定义方法:playAnimation是开关
//跳到下面挨个走流程
handleChangeVisibility(playAnimation);
break;
}
}
//自定义方法,参数是 Boolean 值,即 CheckBox 的取值 isChecked()。
private void handleChangeVisibility(boolean playAnimation) {
Log.d(TAG, "handleChangeVisibility() called with: playAnimation = [" + playAnimation + "]");
//要判断用户能否看见某个view,应使用 isShown()
Log.d(TAG, "handleChangeVisibility: " + mView.isShown());
//如果开了
if (playAnimation) {
//判断图片是否有显示
if (mView.isShown()) {
//如果已经显示的有,则调用自定义方法走退出流程,揭露动画退出形式。
revealExit();
} else {
//否则调用自定义方法走进入流程,揭露动画形式。
revealEnter();
}
} else {
//如果没开总开关,有图片显示则隐藏图片,没有图片就显示图片
//这个分支卵用不大
if (mView.isShown()) {
//把它设置为视图是不可见的,但它仍然占用布局空间。
mView.setVisibility(View.INVISIBLE);
} else {
mView.setVisibility(View.VISIBLE);
}
}
}
//自定义揭露动画播放开始
private void revealEnter() {
int w = mView.getWidth();
int h = mView.getHeight();
//宽高
int cx = w;
int cy = h;
//半径为对角线
int r = (int) Math.hypot(w, h);
//核心就是此静态方法
Animator animator = ViewAnimationUtils.createCircularReveal(mView, cx, cy, 0, r);
//可见性为可见
mView.setVisibility(View.VISIBLE);
animator.start();
}
//自