gpt4 book ai didi

android - 动画不流畅

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:03 25 4
gpt4 key购买 nike

我制作了一个应用程序,点击按钮我滑动了一个线性布局。滑动线性布局的代码工作正常但问题是它在滑动时滞后。还有我设置的滑动高度布局在所有屏幕尺寸上看起来都不合适(特别是在 Nexus 5 上)。请帮助我

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"
android:orientation="vertical">


<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:orientation="vertical">

<ImageView
android:id="@+id/iv_upload_add"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/add" />


<LinearLayout
android:id="@+id/ll_upload_options"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@drawable/choosefile_bg"
android:gravity="center"
android:orientation="vertical">

<pocketdocs.indiehustlers.com.pocketdocsv2.Utils.TextViewGeneral
android:id="@+id/tv_upload_gallery"
style="@style/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:padding="5dp"
android:text="GALLERY"
android:textSize="20sp"
android:visibility="visible" />

<TextView
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"

android:background="@drawable/line" />

<pocketdocs.indiehustlers.com.pocketdocsv2.Utils.TextViewGeneral
android:id="@+id/tv_upload_camera"
style="@style/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:padding="5dp"
android:text="CAMERA"
android:textSize="20sp"
android:visibility="visible" />

<TextView
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"

android:background="@drawable/line" />

<pocketdocs.indiehustlers.com.pocketdocsv2.Utils.TextViewGeneral
android:id="@+id/tv_upload_file"
style="@style/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:padding="5dp"
android:text="FILE"
android:textSize="20sp"
android:visibility="visible" />


</LinearLayout>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginLeft="@dimen/all_left_mar"
android:layout_marginRight="@dimen/all_right_mar"
android:layout_weight="2"
android:gravity="center"
android:orientation="vertical">

<pocketdocs.indiehustlers.com.pocketdocsv2.Utils.EditTextFont
style="@style/edit_text"
android:drawableBottom="@drawable/line_black"
android:hint="File Title"
android:textColor="#000"
android:textColorHint="#000" />

<AutoCompleteTextView
style="@style/edit_text"
android:layout_marginTop="10dp"
android:completionThreshold="1"
android:drawableBottom="@drawable/line_black"
android:hint="Type"
android:textColor="#000"
android:textColorHint="#000" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">

<Switch
android:id="@+id/switch1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="false"
android:textOff="No"
android:textOn="Yes" />

<pocketdocs.indiehustlers.com.pocketdocsv2.Utils.TextViewGeneral
style="@style/text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="@string/Protect"
android:textColor="#000" />

</LinearLayout>

<pocketdocs.indiehustlers.com.pocketdocsv2.Utils.EditTextFont
style="@style/edit_text"
android:layout_marginTop="10dp"
android:drawableBottom="@drawable/line_black"
android:hint="Password"
android:inputType="numberPassword"
android:textColor="#000"
android:textColorHint="#000" />


</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginLeft="@dimen/all_left_mar"
android:layout_marginRight="@dimen/all_right_mar"
android:layout_weight="1">

<pocketdocs.indiehustlers.com.pocketdocsv2.Utils.ButtonFont
style="@style/button"
android:text="UPLOAD" />
</LinearLayout>

</LinearLayout>

代码

if (llUploadOptions.getMeasuredHeight() != 0) {

// tvGallery.setVisibility(View.GONE);
// tvCamera.setVisibility(View.GONE);
// tvFile.setVisibility(View.GONE);

ValueAnimator anim = ValueAnimator.ofInt(llUploadOptions.getMeasuredHeight(),200);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int val = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = llUploadOptions.getLayoutParams();
layoutParams.height = val;
llUploadOptions.setLayoutParams(layoutParams);
}
});
anim.setDuration(700);
anim.start();
} else {
ValueAnimator anim = ValueAnimator.ofInt(llUploadOptions.getMeasuredHeight(),250);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int val = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = llUploadOptions.getLayoutParams();
layoutParams.height = val;
llUploadOptions.setLayoutParams(layoutParams);
}
});
anim.setDuration(700);
anim.start();

}

最佳答案

问题是,您正在尝试为布局的高度设置动画。这意味着,对于您调用 setLayoutParams() 的每个动画步骤,它会通过完整的 View 层次结构强制您的整个布局(包括子级)重新布局,这会导致动画滞后。布局是一项昂贵的操作!

有一些“变通办法”(我不确定你想做什么):

  1. 从 Android 4.0 开始,如果您只想在布局中显示/隐藏带有动画的元素,您只需在 xml 中使用动 Canvas 局更改
  2. 对于更复杂的事情,您可以考虑使用 Kitkat (Api 19) 中引入的 Transitions 框架 https://www.youtube.com/watch?v=S3H7nJ4QaD8 .向后移植:https://github.com/guerwan/TransitionsBackporthttps://github.com/andkulikov/transitions-everywhere
  3. 通过使用平移、alpha 等手动动画 View 来“伪造”动画,并在动画完成后仅设置 LayoutParameters 一次
  4. 我不记得如何调用该 api,但您可以从 ViewGroup 派生子类并将其用作您的根布局。您必须在以某种方式为高度设置动画时拦截布局更改以获得流畅的动画(这就是 animateLayoutChanges = true 的工作原理)。然而,这是一个高级主题,我建议采用其他方式之一

关于android - 动画不流畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27542227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com