Android图片gridview

时间:2015-03-28 13:16:37

标签: android gridview

在应用程序中显示来自SD卡和whatsapp的图像的代码,但是当我运行代码时,会显示图片但是照片之间有随机的空白,而且照片的大小不同。如何调整图像大小?下面是主要活动的代码:

import java.io.File;
import java.util.ArrayList;

 import android.app.ActionBar;
 import android.app.Activity;
 import android.content.Context;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
 import android.os.Environment;
 import android.provider.MediaStore;
  import android.view.Window;
 import android.widget.BaseAdapter;
 import android.widget.GridView;
 import android.widget.Toast;

  public class MainActivity extends Activity {

  private ImageAdapter imageAdapter;

  @Override
   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   GridView gridview = (GridView) findViewById(R.id.gridview);
   imageAdapter = new ImageAdapter(this);
gridview.setAdapter(imageAdapter);

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

String targetPath = ExternalStorageDirectoryPath + "/DCIM/Camera";
File f=new File(Environment.getExternalStorageDirectory()+"/WhatsApp");
if(f.exists()){
 String path=Environment.getExternalStorageDirectory()+"/WhatsApp/Media/WhatsApp Images";
  File t=new File(path);
  File[] fo=t.listFiles();
  for(File fil : fo){
    imageAdapter.add(fil.getAbsolutePath());

  }


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

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

下面是图像适配器的代码:

import java.util.ArrayList;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

 public class ImageAdapter extends BaseAdapter {

  private Context context;
  ArrayList<String> imageList = new ArrayList<String>();

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

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

@Override
public int getCount() {
return imageList.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) {
    imageView = new ImageView(context);
    imageView.setLayoutParams(new GridView.LayoutParams(100,100));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setPadding(8, 8, 8, 8);
} else {
    imageView = (ImageView) convertView;
}

Bitmap bm = decodeSampledBitmapFromUri(imageList.get(position), 100,100);
imageView.setImageBitmap(bm);
return imageView;
}

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

Bitmap bm = null;
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

options.inJustDecodeBounds = false;
bm = BitmapFactory.decodeFile(path, options);

return bm;

}

public int calculateInSampleSize(

    BitmapFactory.Options options, int reqWidth, int reqHeight) {
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;

}

正如我之前所说,代码运行但图像的大小不均匀,并且有空格。请帮我解决一下。

1 个答案:

答案 0 :(得分:0)

尝试设置比例类型fit_xy

imageView.setScaleType(ImageView.ScaleType.FIT_XY);