先看效果
话不多说,直接上代码,有用的拿去
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout android:id="@+id/parent_layout" android:layout_width="match_parent" android:layout_height="30dp" android:layout_gravity="center" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:background="#DCDCDC" android:orientation="horizontal"> <View android:id="@+id/view1" android:layout_width="0dp" android:layout_height="30dp" android:background="@color/colorPrimary"/> <View android:id="@+id/view2" android:layout_width="0dp" android:layout_height="30dp" android:background="@color/colorAccent"/> <View android:id="@+id/view3" android:layout_width="0dp" android:layout_height="30dp" android:background="#ffb238" /> <View android:id="@+id/view4" android:layout_width="0dp" android:layout_height="30dp" android:background="#ff2200" /> <View android:id="@+id/view5" android:layout_width="0dp" android:layout_height="30dp" android:background="#222222" /> </LinearLayout> </LinearLayout>
以上是布局代码
public class MainActivity extends AppCompatActivity { private View view1, view2, view3, view4, view5; private LinearLayout parent_layout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); view1 = findViewById(R.id.view1); view2 = findViewById(R.id.view2); view3 = findViewById(R.id.view3); view4 = findViewById(R.id.view4); view5 = findViewById(R.id.view5); parent_layout = findViewById(R.id.parent_layout); //这个地方的权重需要根据数据自行计算的,现在写的这几个都是死值 view1.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.2f)); parent_layout.setWeightSum(2); ObjectAnimator animator = ObjectAnimator.ofFloat(view1, "scaleX", 0f, 1f); view1.setPivotX(view1.getLeft()); animator.setDuration(900); // 监听动画完成结束 animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); view2.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.3f)); ObjectAnimator animator2 = ObjectAnimator.ofFloat(view2, "scaleX", 0f, 1f); view2.setPivotX(view1.getLeft()); animator2.setDuration(900); animator2.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); view3.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.1f)); ObjectAnimator animator3 = ObjectAnimator.ofFloat(view3, "scaleX", 0f, 1f); view3.setPivotX(view1.getLeft()); animator3.setDuration(900); animator3.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); view4.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.5f)); ObjectAnimator animator4 = ObjectAnimator.ofFloat(view4, "scaleX", 0f, 1f); view4.setPivotX(view1.getLeft()); animator4.setDuration(900); animator4.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); view5.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.1f)); ObjectAnimator animator5 = ObjectAnimator.ofFloat(view5, "scaleX", 0f, 1f); view5.setPivotX(view1.getLeft()); animator5.setDuration(900); animator5.start(); } }); animator4.start(); } }); animator3.start(); } }); animator2.start(); } }); animator.start(); } }
代码是应付一个需求写的,用到属性动画,及view的权限动态设置;有不合适的地方,欢迎指正,共同学习;