Android自动伸展动画,android – 如何实现平滑的展开/折叠动画

博客讨论了Android中扩展/折叠动画的性能问题,发现动画帧率为10fps。通过调整代码并移除`requestLayout()`,帧率提高到50fps,但导致UI无法更新。作者寻求改善动画性能的建议,目标是达到平滑的50fps,并分享了相关布局代码。
摘要由CSDN通过智能技术生成

我指的是在这里找到的扩展/折叠动画代码.

虽然这样做不好,动画不顺利.

我做一些登录代码.

public static void expand(final View v) {

v.measure(MeasureSpec.makeMeasureSpec(((View)v.getParent()).getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(1024, MeasureSpec.AT_MOST));

final int targtetHeight = v.getMeasuredHeight();

v.getLayoutParams().height = 0;

v.setVisibility(View.VISIBLE);

Animation a = new Animation()

{

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

v.getLayoutParams().height = interpolatedTime == 1

? LayoutParams.WRAP_CONTENT

: (int)(targtetHeight * interpolatedTime);

Log.i("CHEOK", "E v.getLayoutParams().height = " + v.getLayoutParams().height);

v.requestLayout();

}

将打印以下日志消息.

10-09 12:29:58.808: I/CHEOK(7874): E v.getLayoutParams().height = 0

10-09 12:29:58.808: I/CHEOK(7874): E v.getLayoutParams().height = 0

10-09 12:29:58.918: I/CHEOK(7874): E v.getLayoutParams().height = 11

10-09 12:29:59.015: I/CHEOK(7874): E v.getLayoutParams().height = 35

10-09 12:29:59.117: I/CHEOK(7874): E v.getLayoutParams().height = 64

10-09 12:29:59.215: I/CHEOK(7874): E v.getLayoutParams().height = 85

10-09 12:29:59.316: I/CHEOK(7874): E v.getLayoutParams().height = -2

10-09 12:29:59.406: I/CHEOK(7874): E v.getLayoutParams().height = -2

新的高度每100ms发生一次.所以动画的FPS大约是10fps

我想看看什么是理想的动画帧率.我删除v.requestLayout();.我得到以下记录.

10-09 12:32:06.547: I/CHEOK(8926): E v.getLayoutParams().height = 0

10-09 12:32:06.562: I/CHEOK(8926): E v.getLayoutParams().height = 0

10-09 12:32:06.605: I/CHEOK(8926): E v.getLayoutParams().height = 4

10-09 12:32:06.625: I/CHEOK(8926): E v.getLayoutParams().height = 7

10-09 12:32:06.644: I/CHEOK(8926): E v.getLayoutParams().height = 10

10-09 12:32:06.664: I/CHEOK(8926): E v.getLayoutParams().height = 14

10-09 12:32:06.679: I/CHEOK(8926): E v.getLayoutParams().height = 18

10-09 12:32:06.699: I/CHEOK(8926): E v.getLayoutParams().height = 22

10-09 12:32:06.715: I/CHEOK(8926): E v.getLayoutParams().height = 27

10-09 12:32:06.734: I/CHEOK(8926): E v.getLayoutParams().height = 32

10-09 12:32:06.750: I/CHEOK(8926): E v.getLayoutParams().height = 37

10-09 12:32:06.769: I/CHEOK(8926): E v.getLayoutParams().height = 42

10-09 12:32:06.785: I/CHEOK(8926): E v.getLayoutParams().height = 47

10-09 12:32:06.804: I/CHEOK(8926): E v.getLayoutParams().height = 52

10-09 12:32:06.828: I/CHEOK(8926): E v.getLayoutParams().height = 59

10-09 12:32:06.840: I/CHEOK(8926): E v.getLayoutParams().height = 62

10-09 12:32:06.863: I/CHEOK(8926): E v.getLayoutParams().height = 67

10-09 12:32:06.879: I/CHEOK(8926): E v.getLayoutParams().height = 71

10-09 12:32:06.894: I/CHEOK(8926): E v.getLayoutParams().height = 75

10-09 12:32:06.910: I/CHEOK(8926): E v.getLayoutParams().height = 79

10-09 12:32:06.929: I/CHEOK(8926): E v.getLayoutParams().height = 82

10-09 12:32:06.945: I/CHEOK(8926): E v.getLayoutParams().height = 85

10-09 12:32:06.965: I/CHEOK(8926): E v.getLayoutParams().height = 88

10-09 12:32:06.984: I/CHEOK(8926): E v.getLayoutParams().height = 89

10-09 12:32:07.000: I/CHEOK(8926): E v.getLayoutParams().height = 91

10-09 12:32:07.019: I/CHEOK(8926): E v.getLayoutParams().height = 91

10-09 12:32:07.039: I/CHEOK(8926): E v.getLayoutParams().height = -2

10-09 12:32:07.054: I/CHEOK(8926): E v.getLayoutParams().height = -2

每约20ms出现新的高度.所以动画的FPS大概是50fps

当然,我不能删除requestLayout,因为UI不会在屏幕上更新.

我在想,有没有什么改进可以做到,实现动画FPS关闭到50fps?我看到一些商业产品具有平滑的Expand / collapse示例.所以,我认为这是可以实现的.就这样,我不知道究竟如何.

我的布局代码如下:

android:clickable="true"

android:id="@+id/chart_linear_layout"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:layout_marginLeft="10dp"

android:layout_marginRight="10dp"

android:background="@drawable/dummy"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:orientation="horizontal">

android:layout_width="0dp"

android:width="0dp"

android:layout_weight="0.6"

android:layout_height="wrap_content"

android:gravity="left"

android:textSize="20sp"

android:textColor="#ff000000"

android:text="Summary chart" />

android:id="@+id/chart_price_text_view"

android:layout_width="0dp"

android:width="0dp"

android:layout_weight="0.4"

android:layout_height="wrap_content"

android:gravity="right"

android:textSize="20sp"

android:textColor="#ffF76D3C"

android:text="$2.99" />

android:visibility="gone"

android:id="@+id/chart_description_text_view"

android:layout_marginLeft="10dp"

android:layout_marginRight="10dp"

android:layout_marginBottom="10dp"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/currency_exchange_description"

android:textColor="#ff626262"

android:textSize="15sp" />

我希望在chart_description_text_view上执行流畅的动画

折叠(应用程式启动期间)

扩展(当用户点击它时)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值