【问题标题】:Animating when re-positioning a view重新定位视图时的动画
【发布时间】:2016-05-06 01:41:58
【问题描述】:

正如您在附加代码中看到的,linearLayoutLogo 包含 ProgressBarTextViewlinearLayoutReading 包含 ImageViewTextView。当linearLayoutReading 可见时,由于android:layout_centerInParent="true",两个布局会围绕中心点重新定位。

如何为linearLayoutLogo 设置动画,使其在linearLayoutReading 可见之前向上移动到新位置?请看附件video for an example

activity_main.xml

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_centerInParent="true"
    android:gravity="center">

    <LinearLayout
        android:id="@+id/linearLayoutLogo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">

        <ImageView
            android:id="@+id/imageViewRLogo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_accessibility_black_24dp"
            android:padding="8dp"/>

        <TextView
            android:id="@+id/textViewAppTitle2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="34sp"
            android:textColor="#CCFFFFFF"
            android:text="AppName"/>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayoutReading"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="24dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/Base.TextAppearance.AppCompat.Large"
            android:text="Reading from device"
            android:textColor="#BF000000" />
        <ProgressBar
            android:id="@+id/progressBarSplash"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
            android:paddingBottom="8dp"/>

    </LinearLayout>

</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
public ProgressBar progressBarSplash;
public LinearLayout linearLayoutReading;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    linearLayoutReading = (LinearLayout)findViewById(R.id.linearLayoutReading);
    linearLayoutReading.setVisibility(View.GONE);

    new CountDownTimer(5000, 1000) {

        public void onTick(long millisUntilFinished) {
        }

        public void onFinish() {
            linearLayoutReading.setVisibility(View.VISIBLE);
            progressBarSplash = (ProgressBar)findViewById(R.id.progressBarSplash);
            progressBarSplash.setEnabled(true);
            progressBarSplash.setIndeterminate(true);
        }
    }.start();
}
}

【问题讨论】:

  • 您是否尝试过使用android:animateLayoutChanges="true"

标签: android android-layout android-animation android-view


【解决方案1】:

在 Android Studio 上进行了测试。只需在最顶部的LinearLayout 中包含android:animateLayoutChanges="true"(带有centerInParent 元素的那个)。

【讨论】:

  • 这真是令人惊讶。一条线完全达到了我的目标!非常感谢。
  • 我第一次遇到它时的反应完全一样。干杯! :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 2015-05-31
相关资源
最近更新 更多