效果图为:点击加号按钮,加号隐藏,减号旋转显示,另外4张图片也旋转一定角度显示
点击减号按钮,减号隐藏,加号旋转显示,另外4张图片也旋转一定角度隐藏
首先放五张图片,使用RelativeLayout布局,因为可以使这五张图片重叠起来
customer.xml布局
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- >
- <RelativeLayout
- android:layout_marginRight="20dp"
- android:gravity="right"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:id="@+id/image_pingbi"
- android:src="@drawable/shiled"
- />
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:id="@+id/image_copy"
- android:src="@drawable/copylink"
- />
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:id="@+id/image_report"
- android:src="@drawable/report"
- />
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:id="@+id/image_jian"
- android:src="@drawable/packuphorizontal"
- />
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:id="@+id/image_show"
- android:src="@drawable/show"
- />
- </RelativeLayout>
- </LinearLayout>
使用自定义view的方式,继承RelativeLayout,引入customer.xml布局
- public class CustomerView extends RelativeLayout {
- private ImageView image_show;
- private ImageView image_jian;
- private ImageView image_report;
- private ImageView image_copy;
- private ImageView image_pingbi;
- public CustomerView(Context context) {
- super(context);
- }
- public CustomerView(Context context, AttributeSet attrs) {
- super(context, attrs);
- View view = LayoutInflater.from(context).inflate(R.layout.customer, this, false);
- image_show = view.findViewById(R.id.image_show);
- image_jian = view.findViewById(R.id.image_jian);
- image_report = view.findViewById(R.id.image_report);
- image_copy = view.findViewById(R.id.image_copy);
- image_pingbi = view.findViewById(R.id.image_pingbi);
- //加号按钮的点击事件,展示另外三张图片
- image_show.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- image_jian.setVisibility(View.VISIBLE);
- image_show.setVisibility(View.GONE);
- showMenu();
- }
- });
- //减号的点击事件,隐藏另外三张图片
- image_jian.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- image_jian.setVisibility(View.GONE);
- image_show.setVisibility(View.VISIBLE);
- hideMenu();
- }
- });
- addView(view);
- }
- public CustomerView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
- //属性动画,,展示出来
- public void showMenu(){
- //三个平移动画 平移出来
- ObjectAnimator firstAnimator = ObjectAnimator.ofFloat(image_pingbi
- ,"translationX",0,-65*3);
- ObjectAnimator secondAnimator = ObjectAnimator.ofFloat(image_copy
- ,"translationX",0,-65*2);
- ObjectAnimator thirdAnimator = ObjectAnimator.ofFloat(image_report
- ,"translationX",0,-65*1);
- //旋转动画
- ObjectAnimator rotation1 = ObjectAnimator.ofFloat(image_jian, "rotation", 0, 135, 0);
- ObjectAnimator rotation2 = ObjectAnimator.ofFloat(image_report, "rotation", 0, 180, 0);
- ObjectAnimator rotation3 = ObjectAnimator.ofFloat(image_copy, "rotation", 0, 180, 0);
- ObjectAnimator rotation4 = ObjectAnimator.ofFloat(image_pingbi, "rotation", 0, 180, 0);
- //组合动画
- AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.setDuration(800);//动画时长
- animatorSet.setInterpolator(new OvershootInterpolator());
- //设置动画一起播放
- animatorSet.playTogether(rotation1,rotation2,rotation3,rotation4,firstAnimator,secondAnimator,thirdAnimator);
- animatorSet.start();
- }
- public void hideMenu(){
- //三个平移回去
- ObjectAnimator firstAnimator = ObjectAnimator.ofFloat(image_pingbi
- , "translationX", image_report.getTranslationX(), 0);
- ObjectAnimator secondAnimator = ObjectAnimator.ofFloat(image_copy
- , "translationX", image_copy.getTranslationX(), 0);
- ObjectAnimator thirdAnimator = ObjectAnimator.ofFloat(image_report
- , "translationX", image_pingbi.getTranslationX(), 0);
- ObjectAnimator rotation1 = ObjectAnimator.ofFloat(image_show, "rotation", 0, 135, 0);
- ObjectAnimator rotation2 = ObjectAnimator.ofFloat(image_copy, "rotation", 0, 180, 0);
- ObjectAnimator rotation3 = ObjectAnimator.ofFloat(image_pingbi, "rotation", 0, 180, 0);
- ObjectAnimator rotation4 = ObjectAnimator.ofFloat(image_report, "rotation", 0, 180, 0);
- AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.setDuration(800);
- animatorSet.setInterpolator(new OvershootInterpolator());
- animatorSet.playTogether(rotation1,rotation2,rotation3,rotation4,firstAnimator,secondAnimator,thirdAnimator);
- animatorSet.start();
- }
- }
- <--自己的包名类名-->
- <com.example.day180131zuoye.customview.CustomerView
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>