【发布时间】:2013-07-19 23:25:05
【问题描述】:
我在第一个活动中使用SurfaceView。在使用SurfaceView 单击图像时,我会移动到第二个活动,同时存储最近单击图像的路径。在第二个活动中,我想在Gallery 中显示该图像。
在点击按钮的第二个活动中,我再次移动到第一个活动,点击图片后,我移动到第二个活动。
现在在第二个活动中,将有 2 张图片应该显示在 Gallery 中。
我的问题是点击第一张图片后,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 之前检索?
【问题讨论】:
-
你能发布你的适配器代码吗?
-
如果第一次点击图片,请使用 Logcat 检查
mImageIds的内容。在getView()中执行此操作。我觉得你的适配器没问题。 -
mImageIds确实有图像 URI。同样g.getChildCount也给出 0+ 结果。 -
仔细检查
length的值。第一项可能设置为zero。 -
天哪。我怎么错过了。请检查我编辑的问题。
标签: android surfaceview android-gallery