简体   繁体   English

从文件夹创建Android Gallery

[英]Create Android Gallery from Folder

i am looking for a code that gets images from SDCard Folder and creates a Gallery shown in an activity. 我正在寻找从SDCard文件夹获取图像并创建活动中显示的库的代码。 I found some sources on the web including on this forum but i can't resize the thumb. 我在网上找到了一些资源,包括在这个论坛上,但是我无法调整大小。

Can you help me with a easy and working Source Code? 您可以通过简单易用的源代码帮助我吗?

Here is something that works the way i want it to but loads images from drawable folder and i need from SD Card Folder. 这是一些我想要的方法,但是从可绘制文件夹中加载图像,而我需要从SD卡文件夹中加载图像。

http://javatechig.com/android/android-gridview-example-building-image-gallery-in-android http://javatechig.com/android/android-gridview-example-building-image-gallery-in-android

Edit - CODE HAD BEEN ADDED 编辑-已添加代码

MainActivity.java MainActivity.java

<RelativeLayout 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:background="#f0f0f0"
    tools:context=".MainActivity" >

    <GridView
        android:id="@+id/gridView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:columnWidth="100dp"
        android:gravity="center"
        android:numColumns="auto_fit"
        android:verticalSpacing="5dp"
        android:drawSelectorOnTop="true"
        android:stretchMode="columnWidth" >
    </GridView>

</RelativeLayout>

row_grid.xml row_grid.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:orientation="vertical"
    android:padding="5dp"
    android:clickable="true"
    android:background="@drawable/grid_color_selector"
    android:focusable="true">

    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="100dp" >
    </ImageView>

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:gravity="center"
        android:textSize="12sp" >
    </TextView>

</LinearLayout>

GridViewAdapter.java GridViewAdapter.java

import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/**
 *
 * @author javatechig {@link http://javatechig.com}
 *
 */
public class GridViewAdapter extends ArrayAdapter {
    private Context context;
    private int layoutResourceId;
    private ArrayList data = new ArrayList();

    public GridViewAdapter(Context context, int layoutResourceId,
            ArrayList data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.imageTitle = (TextView) row.findViewById(R.id.text);
            holder.image = (ImageView) row.findViewById(R.id.image);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        ImageItem item = data.get(position);
        holder.imageTitle.setText(item.getTitle());
        holder.image.setImageBitmap(item.getImage());
        return row;
    }

    static class ViewHolder {
        TextView imageTitle;
        ImageView image;
    }
}

ImageItem.java ImageItem.java

package com.javatechig.gridview;

import android.graphics.Bitmap;

/**
 * @author javatechig {@link http://javatechig.com}
 *
 */
public class ImageItem {
    private Bitmap image;
    private String title;

    public ImageItem(Bitmap image, String title) {
        super();
        this.image = image;
        this.title = title;
    }

    public Bitmap getImage() {
        return image;
    }

    public void setImage(Bitmap image) {
        this.image = image;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

MainActivity.java MainActivity.java

import java.util.ArrayList;
import android.app.Activity;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.GridView;

/**
 *
 * @author javatechig {@link http://javatechig.com}
 *
 */
public class MainActivity extends Activity {
    private GridView gridView;
    private GridViewAdapter customGridAdapter;

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

        gridView = (GridView) findViewById(R.id.gridView);
        customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, getData());
        gridView.setAdapter(customGridAdapter);
    }

    private ArrayList getData() {
        final ArrayList imageItems = new ArrayList();
        // retrieve String drawable array
        TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids);
        for (int i = 0; i < imgs.length(); i++) {
            Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
                    imgs.getResourceId(i, -1));
            imageItems.add(new ImageItem(bitmap, "Image#" + i));
        }

        return imageItems;

    }

}

Thanks! 谢谢!

You can get a path to the phone's image directory doing the following: 您可以执行以下操作获取手机图像目录的路径:

File path = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);

Since you want all the images, you can then get an array of files by calling listFiles() So: 由于需要所有图像,因此可以通过调用listFiles()获得文件数组。

File[] imageFiles = path.listFiles();

To convert each image, you can then use the BitmapFactory , and iterate over the file array: 要转换每个图像,可以使用BitmapFactory ,并遍历文件数组:

Bitmap image = BitmapFactory.decodeFile(imageFiles[i].getAbsolutePath());

So in your case, the getData() method would look like this: 因此,在您的情况下,getData()方法将如下所示:

private ArrayList getData() {
    final ArrayList imageItems = new ArrayList();

    File path = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);
    File[] imageFiles = path.listFiles();
    for (int i = 0; i < imageFiles.length(); i++) {
        Bitmap bitmap = BitmapFactory.decodeFile(imageFiles[i].getAbsolutePath())
        imageItems.add(new ImageItem(bitmap, "Image#" + i));
    }

    return imageItems;}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM