android - 图库只有 1 张图片时不显示任何内容

标签 android surfaceview android-gallery

我在第一个 Activity 中使用 SurfaceView。使用 SurfaceView 单击图像时,我转到第二个 Activity ,该 Activity 还存储最近单击图像的路径。在第二个 Activity 中,我想在 Gallery 中显示该图像。

在点击按钮的第二个 Activity 中,我再次转到第一个 Activity ,点击图片后,我转到第二个 Activity 。

现在在第二个 Activity 中,Gallery 中将显示 2 张图像。

我的问题是点击第一张图片后,Gallery 没有显示任何内容。请注意,正在调用为 Gallery 设置的适配器的 getView()

但是在点击第二张图片之后,当 Gallery 中有 2 张或更多图片时,它们会被显示。

我还尝试了 g.refreshDrawableState(); 之后

g.setAdapter(new ImageAdapter(this));
g.setOnItemClickListener(this);     
g.setSelection(0, false);

但无济于事。

我知道我在这里写的内容听起来很复杂,但请尝试将场景形象化。

感谢任何帮助。

编辑

ImageAdapter.java

public class ImageAdapter extends BaseAdapter {
        public ImageAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            return mImageIds.length;//mImageIds is Array of image paths
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i = new ImageView(mContext);

            final String imageUri = mImageIds[position].trim();
            try {
                if (imageUri.length() != 0) {
                    File f = new File(imageUri);
                    if (f.exists()) {
                        b = constants.shrinkBitmap(f.getPath(), 800, 800);
                        d = new BitmapDrawable(getResources(), b);
                        i.setImageDrawable(d);
                    } else {
                        i.setBackgroundColor(Color.WHITE);
                        i.setImageResource(R.drawable.ic_launcher);
                    }
                } else {
                    i.setBackgroundResource(R.drawable.ic_launcher);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            i.setAdjustViewBounds(true);
//BELOW "length" is some predefined value
            i.setPadding(Math.round(length * 0.05f), 0,
                    Math.round(length * 0.05f), 0);
            i.setLayoutParams(new Gallery.LayoutParams(Math
                    .round(length * 0.9f),
                    LayoutParams.WRAP_CONTENT));
            i.setScaleType(ScaleType.FIT_XY);
            return i;
        }
    }

编辑(2)

根据 Vikram 的建议,我尝试记录 length 值,第一次确实是 0,即调用 时i.setLayoutParams(new Gallery.LayoutParams(Math.round(length * 0.9f),LayoutParams.WRAP_CONTENT));

我通过这种方式在 onCreate() 之后设置这个 length 变量:

g.post(new Runnable() {
     public void run() {
       length = g.getRight() - g.getLeft();
     }
    });

因为我想在代码中检索父布局的宽度并相应地设置图库项目宽度。

我知道我得到 length 为 0 的原因是 setContentView() 需要一点时间才能生效。如何在调用 Adapter 之前检索?

最佳答案

变量length 似乎是这里的问题所在。如果它的值为 zero,当调用第一个项目的 getView() 时,width 参数设置为 zero.

在您的编辑中,length 确实获得了一个非零值,也许有点晚了。您可以进行以下调用来更新 View :

myAdapter.notifyDataSetChanged();

在计算length 之后,这个调用应该放在run() 中。

“闪烁”的解决方法很好。作为替代方案(如果画廊的宽度应与屏幕宽度匹配),请尝试以下操作:

代替:

g.post(new Runnable() {
 public void run() {
   length = g.getRight() - g.getLeft();
 }
});

放:

Point pointSize = new Point();
getWindowManager().getDefaultDisplay().getSize(pointSize);
length = pointSize.x;

在初始化适配器之前放置它。

这里要注意的另一件事是 g.getRight() 计算为:

g.getRight() = g.getLeft() + g.getWidth()

因此,要计算长度,您也可以这样做:

length = g.getWidth()

作为:

getWidth() = getRight() - getLeft()

关于android - 图库只有 1 张图片时不显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17745658/

相关文章:

java - 如何在Android中显示绘制位图

android - 扩展 Gallery 的 CoverFlow(已弃用,在 >4.0 设备中无法正常工作)

android - 在 java 文件中创建 android gallery View

android - 返回时如何刷新 fragment UI

android - 如何停止由 run.exec() 在 android 中启动的进程

android - 应用程序传递了 NULL 表面,同时在没有表面 View 的情况下拍照

Android:如何将 ScrollView(带有文本)放入 Gallery 中?

java - Android Studio 0.8.2 URI 有一个权限组件

android - 在Android版Eclipse中使用新版本的开发工具等时出错

java - Android:在 SurfaceViev 上移动多个位图