关于性能:在Android中使用GridView进行缓慢缩放和滚动

Sluggish zoom and scroll with GridView in Android

我正在创建从GridView派生的自定义视图。它包含一个具有缩放和平移功能的自定义图像视图。滚动和缩放功能迟缓。如果父视图是同一个自定义图像视图而不是网格视图,则它工作正常。我之所以这么做,是因为我需要一个静态背景图像,中间有一个交互区域。缩放和滚动的实现与本文类似。我上传了一个复制问题的测试项目。onCreate方法的实现方式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    View myView1;
    boolean sluggish = false;

    if (sluggish) {
        myView1 = new MyGridView(this);
    }
    else {
        myView1 = new MyImageView(this);        
    }

        setContentView(myView1);
}

如果您将迟缓变量设置为true,您将看到ImageView的效果更好。您知道为什么使用GridView会导致缩放和滚动不可用,或者如何解决这个问题吗?

我没有在"静态"ImageView中使用"动态"ImageView,因为我还没有找到如何将ImageView嵌入到其他ImageView中。

事先谢谢。


到目前为止,我找到的最简单和最简单的解决方案是使用自定义框架布局:

1
2
3
4
5
6
7
8
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    View myView1 = new MyFrameLayout(this);

    setContentView(myView1);  
}

它的实现如下所示,并在我发布的第一个示例中使用myImageView自定义控件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MyFrameLayout extends FrameLayout {

    public MyFrameLayout(Context context) {
        super(context);

        MyImageView i1 = new MyImageView(context);

        this.addView(i1);


        MyImageView i2 = new MyImageView(context);

        LayoutParams lp = new LayoutParams(300, 300);
        lp.leftMargin = 100;
        lp.topMargin = 100;
        lp.gravity = 0;

        this.addView(i2, lp);
    }
}

我通过Twitter从Lawrence D'Olivero那里得到了另一个解决方案建议。它包括子类化视图、缓存视图以及使用OnDraw事件在固定的背景上合成滚动图像作为演示。