首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android GridView 點擊項目啟動新 Activity 顯示原圖

     編輯:程式設計綜合問答

需求背景

使用 GridView 顯示縮圖陣列,使用者點擊任一項目時,希望開啟新頁面以實際尺寸顯示完整圖片。

核心思路:Intent 傳遞資源 ID

  1. 在 OnItemClickListener 中取得被點擊項目的位置 position。
  2. 從資料源陣列 imageIDs 取得對應的 R.drawable.xxx 整數資源 ID。
  3. 以 Intent.putExtra() 將該 ID 附加至啟動 DisplayActivity 的 Intent。
  4. 在 DisplayActivity.onCreate() 中取出 ID,並對 ImageView 呼叫 setImageResource()。

關鍵程式碼實作

1. GridView 端(Gallery Activity)

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);
    }
});

2. 顯示端(DisplayActivity)

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);
    }
}

3. activity_display.xml 範例

<?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 點擊查看大圖的標準做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved