Java 在GridView中单击图像时,如何显示图像的完整大小?

Java 在GridView中单击图像时,如何显示图像的完整大小?,java,android,gridview,Java,Android,Gridview,我在互联网上看到了这个例子,我需要做的只是添加一个代码,说明在Gridview中单击图片后如何显示图像的完整大小。有什么想法吗 public class MainActivity extends Activity { ImageAdapter myImageAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

我在互联网上看到了这个例子,我需要做的只是添加一个代码,说明在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;    
   }

   }
}
公共类ImageAdapter扩展了BaseAdapter{
私有上下文;
ArrayList itemList=新建ArrayList();
公共图像适配器(上下文c){
mContext=c;
}
无效添加(字符串路径){
itemList.add(路径);
}
@凌驾
public int getCount(){
返回itemList.size();
}
@凌驾
公共对象getItem(int arg0){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
如果(convertView==null){//如果它没有被回收,初始化一些属性
imageView=新的imageView(mContext);
setLayoutParams(新的GridView.LayoutParams(220220));
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
设置填充(8,8,8,8);
}否则{
imageView=(imageView)convertView;
}
位图bm=decodeSampledBitmapFromUri(itemList.get(position),220220);
设置图像位图(bm);
返回图像视图;
}
公共位图解码SampleDbitMapFromUri(字符串路径、int-reqWidth、int-reqHeight){
位图bm=null;
//使用INJUSTDECBOUNDS首次解码=true检查尺寸
final BitmapFactory.Options=new BitmapFactory.Options();
options.inJustDecodeBounds=true;
解码文件(路径、选项);
//计算样本大小
options.inSampleSize=计算样本大小(options、reqWidth、reqHeight);
//使用inSampleSize集合解码位图
options.inJustDecodeBounds=false;
bm=BitmapFactory.decodeFile(路径、选项);
返回bm;
}
公共整数计算示例大小(
BitmapFactory.Options选项、int reqWidth、int reqHeight){
//图像的原始高度和宽度
最终内部高度=options.outHeight;
最终整数宽度=options.outWidth;
int inSampleSize=1;
如果(高度>要求高度| |宽度>要求宽度){
如果(宽度>高度){
inSampleSize=数学圆((浮动)高度/(浮动)要求高度);
}否则{
inSampleSize=数学圆((浮动)宽度/(浮动)宽度);
}   
}
返回样本大小;
}
}
}

将单击侦听器添加到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);
    }
});
gridview.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
字符串路径=mAdapter.getItem(位置);
意图i=新意图(AndroidTestActivity.this、DetailActivity.class);
i、 putExtra(“路径”,路径);
星触觉(i);
}
});
或者您使用Android的内置功能:

如何创建第二个活动?请使用谷歌搜索以下基本内容:。第二个结果指向Android文档:我将如何获得意图?你能把缺少的部分加起来吗?我是新来的。在我的第一个活动中的Android文档(上面评论中的第二个链接)中描述了所有内容,例如,AndroidTestActivity我将放置setOnItemClickListener,然后我将创建一个名为ex的新类,DetailActivity,在我放置什么之后?我已经试过了。