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事件在固定的背景上合成滚动图像作为演示。