失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android自动伸展动画 android – 如何实现平滑的展开/折叠动画

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

时间:2023-09-05 12:14:56

相关推荐

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

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

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

我做一些登录代码.

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上执行流畅的动画

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

扩展(当用户点击它时)

如果觉得《Android自动伸展动画 android – 如何实现平滑的展开/折叠动画》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。