Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 listView调整动画大小_Android_Performance_Android Layout - Fatal编程技术网

Android listView调整动画大小

Android listView调整动画大小,android,performance,android-layout,Android,Performance,Android Layout,我有一个自定义列表视图: <?xml version="1.0" encoding="utf-8"?> <TableRow android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tableRow">

我有一个自定义列表视图:

<?xml version="1.0" encoding="utf-8"?>
<TableRow
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableRow">

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
       android:layout_height="fill_parent"
        android:src="@drawable/ic_launcher"
        android:contentDescription="@string/imdDesc" />

    <TextView
        android:id="@+id/titleList"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:textSize="25sp"
        android:autoText="false"
        android:gravity="center_vertical|center|center_horizontal" />
</TableRow>
我的清单有12项。当用户单击一个项目时,我需要调整列表的大小。如果用户第一次选择某个项目,列表必须将其宽度更改为原始大小的1/3,并将所选项目的高度增加一倍。如果列表中已经选择了一个项目,并且用户选择了另一个项目,则旧项目必须返回到原始高度,而新选择的项目必须在不改变任何宽度的情况下将其高度加倍。 我想动画所有的大小好看

这是用于更改宽度的动画:

   public class ShrinkList extends Animation
    {
    int fromWidth;
    View view;
    int def;
    public ShrinkList(View view) {
        this.view = view;
        this.fromWidth = view.getWidth();
        def=fromWidth/3;
    }
   @Override
    public boolean willChangeBounds() {
        return true;
    }

    @Override
    public void initialize(int width, int height, int parentWidth,
                           int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
    }
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        int newWidth;
        newWidth = (int) ((def - fromWidth) * interpolatedTime + fromWidth);
        if (newWidth > def/3) {
            view.getLayoutParams().width = newWidth;
            view.requestLayout();
        }
        else{
            view.getLayoutParams().width = def/3;
            view.requestLayout();
        }
    }
    }
这个是用来改变高度的:

    public class Grow extends Animation
    {
    int fromHeight;
    View view;
    int defaultHeight;

    public Grow(View view,int height) {
        this.view = view;
        this.fromHeight = view.getHeight();
        defaultHeight=height;
    }
   @Override
    public boolean willChangeBounds() {
        return true;
    }
    @Override
    public void initialize(int width, int height, int parentWidth,
                           int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
    }
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        int newHeight;
        newHeight = (int) (fromHeight / (1 - interpolatedTime));
            if (newHeight < defaultHeight * 2) {
                view.getLayoutParams().height = newHeight;
                view.requestLayout();
            }
        else{
                view.getLayoutParams().height = defaultHeight*2;
                view.requestLayout();
            }
        }
    }
我的问题是,当列表更改其宽度时,动画一点也不平滑,它只更改宽度,而不更改高度

如何使动画更平滑并同时播放两个动画

我尝试过缩放列表,但这会缩放所有列表。基本上,我只需要在ListView中调整textView的大小,更改layoutParams就可以做到这一点

我曾尝试将Grow.java中的代码插入orefer中的ShrinkList.java中,以播放两个动画一次,而它只播放Grow.java中的一个动画

   public class ShrinkList extends Animation
    {
    int fromWidth;
    View view;
    int def;
    public ShrinkList(View view) {
        this.view = view;
        this.fromWidth = view.getWidth();
        def=fromWidth/3;
    }
   @Override
    public boolean willChangeBounds() {
        return true;
    }

    @Override
    public void initialize(int width, int height, int parentWidth,
                           int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
    }
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        int newWidth;
        newWidth = (int) ((def - fromWidth) * interpolatedTime + fromWidth);
        if (newWidth > def/3) {
            view.getLayoutParams().width = newWidth;
            view.requestLayout();
        }
        else{
            view.getLayoutParams().width = def/3;
            view.requestLayout();
        }
    }
    }
    public class Grow extends Animation
    {
    int fromHeight;
    View view;
    int defaultHeight;

    public Grow(View view,int height) {
        this.view = view;
        this.fromHeight = view.getHeight();
        defaultHeight=height;
    }
   @Override
    public boolean willChangeBounds() {
        return true;
    }
    @Override
    public void initialize(int width, int height, int parentWidth,
                           int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
    }
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        int newHeight;
        newHeight = (int) (fromHeight / (1 - interpolatedTime));
            if (newHeight < defaultHeight * 2) {
                view.getLayoutParams().height = newHeight;
                view.requestLayout();
            }
        else{
                view.getLayoutParams().height = defaultHeight*2;
                view.requestLayout();
            }
        }
    }
    if(h==0) {  //first time the user selects an item =>change width and height
                   Animation a = new ShrinkList(list);
                   a.setInterpolator(new LinearInterpolator());
                   a.setDuration(1000);
                   list.setAnimation(a);
                   list.startAnimation(a);
              }
    Animation a1 = new Grow(view,height); //change only height
                a1.setInterpolator(new LinearInterpolator());
                a1.setDuration(300);
                view.setAnimation(a1);
                view.startAnimation(a1);