【问题标题】:General Question about Android Gallery Control关于 Android 图库控制的一般问题
【发布时间】:2011-11-26 19:48:27
【问题描述】:

所以,我一直在为一个项目进行 xml 布局,该项目涉及在屏幕上获取水平可滚动的图像行,并且只使用了一个水平滚动视图。和一堆图像按钮。我使用了一个包含将它放在另一个 xml 布局页面上,然后另一个程序员将​​动态填充图像。

我的问题是,画廊控制对我们有什么好处?我没有做过太多的 Java 编程,而且我在网上看到了一些关于如何实现这个控件的说明,但关于你为什么要使用这个控件的说明并不多。看起来这个控件主要是通过数组通过 Java 插入来工作的,但除此之外,我不知道阅读我创建布局并让其他程序员手动插入自己的图像的方式有什么好处。

另一个相关问题 - 画廊的这些图像是否需要我的图像视图,或者它们可以是图像地图吗?目前它们是图像地图,因为我们希望它们能够被点击以转到用户的个人资料等。

谢谢!

【问题讨论】:

    标签: java android xml layout


    【解决方案1】:

    图库几乎是完美的。在我的一个项目中,我确实有一个带有画廊的 LinearLayout:

    <Gallery 
     android:id="@+id/gallery"
     android:layout_height="0dip"
     android:layout_weight="1"
     android:layout_width="fill_parent"
     android:spacing="2dip" />    
    

    一个Activity实现了OnItemClickListener:

    public class MyActivity extends Activity implements OnItemClickListener {
    

    一个数据结构包含所有项目并被发送到一个适配器:

    private void processGallery() {
     adapter = new MyAdapter(this, containers, appName);
     if (adapter != null) {
      gallery.setAdapter(adapter);
     }
    }
    
    @Override
    public void onItemClick(final AdapterView<?> adapterView, final View view, final int position, final long id) {
     if (containers != null) {
      container = containers.get(position);
      if (container != null) {
       // Handle selected image
      }
     }
    }
    

    适配器是一个普通的 BaseAdapter - 没什么神奇的:

    public class MyAdapter extends BaseAdapter {
    
        private ArrayList<Container> containers;
        private Context              context;
    
        public int getCount() {
            return containers.size();
        }
    
        public Object getItem(final int position) {
            return containers.get(position);
        }
    
        public long getItemId(final int position) {
            return position;
        }
    
        public View getView(final int position, final View contentView, final ViewGroup viewGroup) {
            ImageView imageView = new ImageView(context);
            Container container = containers.get(position);
            if (container != null) {
               // Do your image thing here
            }
    
            return imageView;
        }
    
        public MyAdapter(final Context context, final ArrayList<Container> containers, final String appName) {
            this.context = context;
            this.containers = containers;
        }
    }
    

    这个简单的代码提供了一个带有可点击项目的水平滚动图片库。点击发送到活动 - 无需在适配器中做一些花哨的事情。我从此处显示的代码中删除了我使用的 DrawableCache,因为我的项目确实来自网络。

    【讨论】:

    • 您需要的一切都显示在上面的代码中。您不清楚哪些具体部分?
    • 我只是想知道 API 是否比 Android 更混乱。您在哪里需要 50 多行代码和 10 个导入图片库? Android API 在某处似乎是错误的。难怪它来自谷歌,dart lang 背后的人,你需要 15K+ 行来创建一个 Hello World。这整件事对我来说似乎不太合适。
    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多