2014-11-01 46 views
1

我需要从android.I中的SD卡中获取所有图像已处理获取所有图像并显示在android的网格视图中,但我无法获取所有图像,图像仅在一个特定的路径。如何从SD卡获取所有图像?

MainActivity.java

import java.io.File; 
import android.os.Bundle; 
import android.os.Environment; 
import android.app.Activity; 
import android.content.Intent; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.GridView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

public class MainActivity extends Activity 
{ 

    // Declare variables 
    private String[] FilePathStrings; 
    private String[] FileNameStrings; 
    private File[] listFile; 
    GridView grid; 
    GridViewAdapter adapter; 
    File file; 

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

     if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
     { 
      Toast.makeText(this, "Error! No SDCARD Found!", Toast.LENGTH_LONG).show(); 
     } 
     else 
     { 
      file = new File(Environment.getExternalStorageDirectory()+ File.separator + "SDImageTutorial"); 
      file.mkdirs(); 
     } 

     if (file.isDirectory()) 
     { 
      listFile = file.listFiles(); 

      FilePathStrings = new String[listFile.length]; 

      FileNameStrings = new String[listFile.length]; 

      for (int i = 0; i < listFile.length; i++) 
      { 
       FilePathStrings[i] = listFile[i].getAbsolutePath(); 
       FileNameStrings[i] = listFile[i].getName(); 
      } 
     } 


     grid = (GridView) findViewById(R.id.gridView); 

     adapter = new GridViewAdapter(this, FilePathStrings, FileNameStrings); 

     grid.setAdapter(adapter); 

     grid.setOnItemClickListener(new OnItemClickListener() 
     { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) 
      { 
       Intent i = new Intent(MainActivity.this, ViewImage.class); 

       i.putExtra("filepath", FilePathStrings); 
       Log.e("ok","fine : "+FilePathStrings); 

       i.putExtra("filename", FileNameStrings); 

       i.putExtra("position", position); 
       startActivity(i); 
       finish(); 
      } 
     }); 
    } 
} 

的Manifest.xml权限

回答

1

试试这个兄弟! 的活动:

package com.example.androidgridview; 
import java.io.File; 
import java.util.ArrayList; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Environment; 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.Toast; 
public class MainActivity extends Activity { 

AsyncTaskLoadFiles myAsyncTaskLoadFiles; 
public class AsyncTaskLoadFiles extends AsyncTask<Void, String, Void> { 

    File targetDirector; 
    ImageAdapter myTaskAdapter; 
    public AsyncTaskLoadFiles(ImageAdapter adapter) { 
    myTaskAdapter = adapter; 
    } 
    @Override 
    protected void onPreExecute() { 
    String ExternalStorageDirectoryPath = Environment 
    .getExternalStorageDirectory().getAbsolutePath(); 
    String targetPath = ExternalStorageDirectoryPath + "/test/"; 
    targetDirector = new File(targetPath); 
    myTaskAdapter.clear(); 

    super.onPreExecute(); 
    } 
    @Override 
    protected Void doInBackground(Void... params) { 

    File[] files = targetDirector.listFiles(); 
    for (File file : files) { 
    publishProgress(file.getAbsolutePath()); 
    if (isCancelled()) break; 
    } 
    return null; 
    } 
    @Override 
    protected void onProgressUpdate(String... values) { 
    myTaskAdapter.add(values[0]); 
    super.onProgressUpdate(values); 
    } 
    @Override 
    protected void onPostExecute(Void result) { 
    myTaskAdapter.notifyDataSetChanged(); 
    super.onPostExecute(result); 
    } 
} 
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); 
    } 

    void clear() { 
    itemList.clear(); 
    } 

    void remove(int index){ 
    itemList.remove(index); 
    } 
    @Override 
    public int getCount() { 
    return itemList.size(); 
    } 
    @Override 
    public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return itemList.get(position); 
    } 
    @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 myImageAdapter; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final GridView gridview = (GridView) findViewById(R.id.gridview); 
    myImageAdapter = new ImageAdapter(this); 
    gridview.setAdapter(myImageAdapter); 
    myAsyncTaskLoadFiles = new AsyncTaskLoadFiles(myImageAdapter); 
    myAsyncTaskLoadFiles.execute(); 
    gridview.setOnItemClickListener(myOnItemClickListener); 
    Button buttonReload = (Button)findViewById(R.id.reload); 
    buttonReload.setOnClickListener(new OnClickListener(){ 
    @Override 
    public void onClick(View arg0) { 
    myAsyncTaskLoadFiles.cancel(true); 
    myImageAdapter = new ImageAdapter(MainActivity.this); 
    gridview.setAdapter(myImageAdapter); 
    myAsyncTaskLoadFiles = new AsyncTaskLoadFiles(myImageAdapter); 
    myAsyncTaskLoadFiles.execute(); 
    }}); 
} 
OnItemClickListener myOnItemClickListener = new OnItemClickListener() { 
    @Override 

     public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 
     String prompt = "remove " + (String) parent.getItemAtPosition(position); 
     Toast.makeText(getApplicationContext(), prompt, Toast.LENGTH_SHORT) 
     .show(); 
     myImageAdapter.remove(position); 

    myImageAdapter.notifyDataSetChanged(); 
    } 
}; 
} 

再布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <Button 
     android:id="@+id/reload" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Reload"/> 
    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:columnWidth="90dp" 
     android:numColumns="auto_fit" 
     android:verticalSpacing="10dp" 
     android:horizontalSpacing="10dp" 
     android:stretchMode="columnWidth" 
     android:gravity="center"/> 

</LinearLayout> 

点击here进一步的信息。