【问题标题】:How can I show the full size of Image when an image was clicked in GridView?在 GridView 中单击图像时,如何显示图像的完整大小?
【发布时间】:2012-09-14 16:27:30
【问题描述】:

我在互联网上看到了这个示例,我需要做的只是添加一个代码,说明在 Gridview 中单击图片后如何显示完整大小的图像。有什么想法吗?

public class MainActivity extends Activity {

    ImageAdapter myImageAdapter;

   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    GridView gridview = (GridView) findViewById(R.id.gridview);
    myImageAdapter = new ImageAdapter(this);
    gridview.setAdapter(myImageAdapter);

    String ExternalStorageDirectoryPath = Environment
      .getExternalStorageDirectory()
      .getAbsolutePath();

    String targetPath = ExternalStorageDirectoryPath + "/test/";

    Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG).show();
    File targetDirector = new File(targetPath);

    File[] files = targetDirector.listFiles();
    for (File file : files){
     myImageAdapter.add(file.getAbsolutePath());
    } 
}

我认为这是适配器类。

public class ImageAdapter extends BaseAdapter {

 private Context mContext;
 ArrayList<String> itemList = new ArrayList<String>();

 public ImageAdapter(Context c) {
  mContext = c; 
 }

 void add(String path){
  itemList.add(path); 
 }

@Override
public int getCount() {
return itemList.size();
}

@Override
public Object getItem(int arg0) {
 // TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
     if (convertView == null) {  // if it's not recycled, initialize some attributes
         imageView = new ImageView(mContext);
         imageView.setLayoutParams(new GridView.LayoutParams(220, 220));
         imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
         imageView.setPadding(8, 8, 8, 8);
     } else {
         imageView = (ImageView) convertView;
     }

     Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 220, 220);

     imageView.setImageBitmap(bm);
     return imageView;
     }

     public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) {

     Bitmap bm = null;
    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    // Calculate inSampleSize
     options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    bm = BitmapFactory.decodeFile(path, options); 

    return bm;   
    }

    public int calculateInSampleSize(

    BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {
    if (width > height) {
    inSampleSize = Math.round((float)height / (float)reqHeight);    
    } else {
    inSampleSize = Math.round((float)width / (float)reqWidth);    
    }   
    }

    return inSampleSize;    
   }

   }
}

【问题讨论】:

    标签: java android gridview


    【解决方案1】:

    为您的 GridView 添加一个点击监听器。从那里您必须打开第二个显示完整尺寸图像的活动。

    gridview.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String path = mAdapter.getItem(position);
            Intent i = new Intent(AndroidTestActivity.this, DetailActivity.class);
            i.putExtra("path", path);
            startActivity(i);
        }
    });
    

    或者您使用 Android 的内置功能:
    Launching Intent.ACTION_VIEW intent not working on saved image file

    【讨论】:

    • 如何创建第二个Activity?
    • 这些基本的东西请使用谷歌:google.com/search?q=android+activity。第二个结果指向 Android 文档:developer.android.com/guide/components/activities.html
    • 我将如何获得 Intent?你能补充缺失的部分吗?我是新手。
    • Android 文档中描述了所有内容(上述评论中的第二个链接)
    • 在我的第一个活动中,例如。 AndroidTestActivity 我将放置 setOnItemClickListener 然后我将创建一个名为的新类,例如,DetailActivity 之后我将放置什么?我已经试过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2015-11-03
    • 2014-10-12
    相关资源
    最近更新 更多