Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 布局动画问题-无平滑滚动_Android_Android Listview_Android Animation - Fatal编程技术网

Android 布局动画问题-无平滑滚动

Android 布局动画问题-无平滑滚动,android,android-listview,android-animation,Android,Android Listview,Android Animation,我有一个带有文本视图、图像等的线性视图(a)和一个带有列表视图的滚动视图(B)。在列表视图上,我想降低图像的高度。当用户进入列表时,高度应减少到图像大小的一半。当用户向上滚动列表时,我希望将高度增加到原始高度 我已经成功地使用以下代码使其工作 if (scrolledUp) { int height = linearLayout.getMeasuredHeight(); int setHeight = height - scroll

我有一个带有文本视图、图像等的线性视图(a)和一个带有列表视图的滚动视图(B)。在列表视图上,我想降低图像的高度。当用户进入列表时,高度应减少到图像大小的一半。当用户向上滚动列表时,我希望将高度增加到原始高度

我已经成功地使用以下代码使其工作

 if (scrolledUp) { 
              int height = linearLayout.getMeasuredHeight();  
              int setHeight = height - scrollValue; 
              linearLayout.getLayoutParams().height = setHeight;
              linearLayout.requestLayout();
            }

我面临的问题是,频繁调用requestLayout()会使scrollview的滚动速度非常慢,而且令人毛骨悚然。如何改进实现以使滚动更平滑?

请参考此示例

在开发人员文档中,提到调用
requestLayout()
的频率较低:

另一个非常昂贵的操作是遍历布局。任何时候视图调用requestLayout(),Android UI系统都需要遍历整个视图层次结构,以确定每个视图需要多大。如果发现有冲突的度量,则可能需要多次遍历层次结构

您的代码的备选方案是:

  • 获取布局参数
    getLayoutParams()

  • 修改参数
    lp..height=setHeight

  • 将布局参数设置为线性布局
    setLayoutParams(lp)

  • 代码如下所示:

     if (scrolledUp) { 
          int height = linearLayout.getMeasuredHeight();  
          int setHeight = height - scrollValue; 
          LinearLayout.LayoutParams lp = linearLayout.getLayoutParams();
          lp.height = setHeight;
          linearLayout.setLayoutParams(lp);
     }
    

    如果您不想使用lib,我建议您使用lib,看看您的代码在哪里出现问题!您是否尝试过移动A和B的位置而不是重新调整?setLayoutParams在内部调用requestLayout()。您是对的
    setLayoutParams
    调用
    requestLayout
    ,但在设置布局参数后调用
    requestLayout
    是一种很好的做法。。参考