在Android中使用GridView进行缓慢缩放和滚动

时间:2011-07-22 15:30:36

标签: android performance gridview scroll zoom

我正在创建一个从GridView派生的自定义视图。这包含具有缩放和平移功能的自定义ImageView。滚动和缩放功能很慢。如果父视图是相同的自定义ImageView而不是GridView,它可以完美地工作。我正在尝试这样做,因为我需要一个静态背景图像,中心有一个交互区域。缩放和滚动的实现类似于this article。我上传了一个复制问题here的测试项目。 OnCreate方法实现如下:

@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 个答案:

答案 0 :(得分:2)

到目前为止,我发现的最简单,最简单的解决方案是使用自定义FrameLayout:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    View myView1 = new MyFrameLayout(this);

    setContentView(myView1);  
}

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

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);
    }
}

我从Lawrence D'Olivero通过Twitter获得的替代解决方案建议。它包括继承View,缓存它和using the OnDraw event,用于在固定背景上组合滚动图像作为他的演示here