版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhh_csdn_ard/article/details/73274980
前言:对前面文章<弧形菜单>加入动画渐入
效果:
开发环境:AndroidStudio2.2.1+gradle-2.14.1
涉及知识:1.自定义控件,2.事件分发等
部分代码:
扫描二维码关注公众号,回复:
3699637 查看本文章
Activity:
public class HomepageActivity extends AppCompatActivity {
private HomePageMenuLayout homePageMenuLayout;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.homepage_layout);
initLayout();
}
private void initLayout() {
homePageMenuLayout = (HomePageMenuLayout) findViewById(R.id.homepage_layout);
//加载菜单列表
homePageMenuLayout.setMenuItemIconsAndTexts(Constants.MENUALL);
//才点动画初始
new SwitchAnimationUtil().startAnimation(homePageMenuLayout, SwitchAnimationUtil.AnimationType.ROTATE);
//事件监听
homePageMenuLayout.setOnMenuItemClickListener(new HomePageMenuLayout.OnMenuItemClickListener() {
@Override
public void itemClick(View view, int pos) {
Toast.makeText(HomepageActivity.this, Constants.MENUALL[pos], Toast.LENGTH_SHORT).show();
}
});
}
}
动画类:
public class SwitchAnimationUtil {
private int mOrderIndex = 0;
private int mDelay = 80;
private int mDuration = 500;
public SwitchAnimationUtil() {}
public void startAnimation(View root, AnimationType type) {
bindAnimation(root, 0, type);
}
private void bindAnimation(View view, int depth, AnimationType type) {
if (view instanceof ViewGroup) {
ViewGroup group = (ViewGroup) view;
for (int i = 0; i < group.getChildCount(); i++) {
bindAnimation(group.getChildAt(i), depth + 1, type);
}
} else {
runAnimation(view, mDelay * mOrderIndex, type);
mOrderIndex++;
}
}
private void runAnimation(View view, long delay, AnimationType type) {
switch (type) {
case ROTATE:
runRotateAnimation(view, delay);
break;
case ALPHA:
runAlphaAnimation(view, delay);
break;
default:
break;
}
}
private void runAlphaAnimation(View view, long delay) {
view.setAlpha(0);
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);
objectAnimator.setStartDelay(delay);
objectAnimator.setDuration(mDuration);
objectAnimator.setInterpolator(new LinearInterpolator());
objectAnimator.start();
}
private void runRotateAnimation(View view, long delay) {
view.setAlpha(0);
AnimatorSet set = new AnimatorSet();
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "rotation", 0f, 0f);
ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(view, "scaleX", 0f, 1f);
ObjectAnimator objectAnimator3 = ObjectAnimator.ofFloat(view, "scaleY", 0f, 1f);
ObjectAnimator objectAnimator4 = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);
objectAnimator2.setInterpolator(new AccelerateInterpolator(1.0f));
objectAnimator3.setInterpolator(new AccelerateInterpolator(1.0f));
set.setDuration(mDuration);
set.playTogether(objectAnimator,objectAnimator2, objectAnimator3, objectAnimator4);
set.setStartDelay(delay);
set.start();
}
public enum AnimationType {
ALPHA, ROTATE
}
}