私はSurfaceView
私の最初の活動で使用しています。を使用して画像をクリックするSurfaceView
と、最近クリックした画像のパスも格納する 2 番目のアクティビティに移動します。2番目のアクティビティでは、その画像を に表示したいと考えていますGallery
。
ボタン クリックの 2 番目のアクティビティでは、再び 1 番目のアクティビティに移動し、画像をクリックした後、2 番目のアクティビティに移動します。
2 番目のアクティビティでは、 に表示する必要がある 2 つの画像がありますGallery
。
私の問題は、最初の画像をクリックした後、Gallery
何も表示されないことです。getView()
のアダプターセットGallery
が呼び出されることに注意してください。
しかし、2枚目以降の画像をクリックすると、 に画像が2つ以上ある場合Gallery
、それらが表示されます。
私も後で試し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の提案の後、長さの値をログに記録しようとしましたが、実際には初めて0でした。i.setLayoutParams(new Gallery.LayoutParams(Math.round(length * 0.9f),LayoutParams.WRAP_CONTENT));
この方法で、length
直後にこの変数を設定します。onCreate()
g.post(new Runnable() {
public void run() {
length = g.getRight() - g.getLeft();
}
});
コードで親レイアウトの幅を取得し、それに応じてギャラリーアイテムの幅を設定したいので。
length
0を取得する理由はsetContentView()
、有効になるまでに少し時間がかかることを知っています。Adapter が呼び出される前に取得するにはどうすればよいですか?