使用 GridView 顯示縮圖陣列,使用者點擊任一項目時,希望開啟新頁面以實際尺寸顯示完整圖片。
OnItemClickListener 中取得被點擊項目的位置 position。imageIDs 取得對應的 R.drawable.xxx 整數資源 ID。Intent.putExtra() 將該 ID 附加至啟動 DisplayActivity 的 Intent。DisplayActivity.onCreate() 中取出 ID,並對 ImageView 呼叫 setImageResource()。gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(Gallery.this, DisplayActivity.class);
intent.putExtra("imageResId", imageIDs[position]); // 傳遞整數資源 ID
startActivity(intent);
}
});
public class DisplayActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display); // 布局需包含一個 ImageView,id 為 imageView
int resId = getIntent().getIntExtra("imageResId", R.drawable.placeholder); // 提供預設圖
ImageView imageView = findViewById(R.id.imageView);
imageView.setImageResource(resId);
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"
android:contentDescription="@string/full_image" />
</FrameLayout>
setImageResource 可能導致 OOM。建議使用 Glide、Picasso 或 Coil 等圖片載入庫,配合 override() 限制尺寸、apply(RequestOptions.centerCropTransform()) 等選項。ActivityOptions.makeSceneTransitionAnimation() 實現共享元素轉場,提升體驗。DisplayActivity 接入 PhotoView 庫支援雙指縮平移。assets/、SD 卡或網路,改傳遞路徑或 URL,並在目標 Activity 用對應載入方式。❌ 傳遞 Bitmap 物件(會超過 Binder 交易限制 1MB)。
✅ 僅傳遞 int resId、String path 或 Uri 等輕量標識符。
❌ 忘記在 Manifest 註冊 DisplayActivity。
✅ 使用 AppCompatActivity 確保向下相容。
採用「Intent + 資源 ID」模式,程式碼簡潔且效能佳,是 GridView/RecyclerView 點擊查看大圖的標準做法。