现在的位置: 首页 > 综合 > 正文

GridView显示sd卡上的图片

2017年11月05日 ⁄ 综合 ⁄ 共 4756字 ⁄ 字号 评论关闭

下面是核心代码:

public class Submit_WallpaperUploadFragment extends BaseFragment {

    private GridViewAdapter adapter;
    @ViewInject(R.id.gridview)
    private GridView mGridView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.submit_kisekae_wallpaper_selector, container, false);
        ViewUtils.inject(this, rootView);
        return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        adapter = new GridViewAdapter(getActivity(), null, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        mGridView.setAdapter(adapter);
        getLoaderManager().initLoader(0, null, myLoader);
    }

    private LoaderManager.LoaderCallbacks<Cursor> myLoader = new LoaderManager.LoaderCallbacks<Cursor>() {

        @Override
        public void onLoaderReset(Loader<Cursor> loader) {
            adapter.swapCursor(null);
        }

        @Override
        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
            if (data != null) {
                adapter.swapCursor(data);
                ProgressDialogUtils.dismiss();
            }
        }

        @Override
        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
            if (id == 0) {
                ProgressDialogUtils.show(getActivity());
                String[] projection = {MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA};
                // TODO 加入SD是否mounted判断
                Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                String sortOrder = MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC";
                return new CursorLoader(getActivity(), uri, projection, null, null, sortOrder);
            }
            return null;
        }
    };

    private class GridViewAdapter extends CursorAdapter {

        public GridViewAdapter(Context context, Cursor c, int flags) {
            super(context, c, flags);
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            ViewHolder viewHolder;
            View convertView = LayoutInflater.from(context).inflate(R.layout.submit_kisekae_wallpaper_selector_item, parent, false);
            viewHolder = new ViewHolder();
            ViewUtils.inject(viewHolder, convertView);
            convertView.setTag(viewHolder);

            int numColumns = FieldUtils.getGridViewFieldValue(mGridView, "mNumColumns");
            // TODO 加入sdk-int判断
            if (numColumns > 1) {
                ViewGroup.LayoutParams layoutParams = convertView.getLayoutParams();
                int horizontalSpacing = FieldUtils.getGridViewFieldValue(mGridView, "mHorizontalSpacing");
                int left = mGridView.getPaddingLeft();
                int right = mGridView.getPaddingRight();
                int plusWidth = left + right + horizontalSpacing * (numColumns - 1);
                int width = (context.getResources().getDisplayMetrics().widthPixels - plusWidth) / numColumns;
                if (width > 0)
                    layoutParams.width = width;
            }
            viewHolder.contentImg.setImageResource(R.drawable.img_loading);
            return convertView;
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            ViewHolder viewHolder = (ViewHolder) view.getTag();
            int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
            String imgPath = cursor.getString(index);
            Picasso picasso = Picasso.with(getActivity());
            picasso.setLoggingEnabled(false);
            picasso.load("file://" + imgPath)
                    .placeholder(R.drawable.img_loading)
                    .config(Bitmap.Config.RGB_565)
                    .error(R.drawable.img_loadfail)
                    .fit()
                    .into(viewHolder.contentImg);
        }

    }

    public class ViewHolder {
        @ViewInject(R.id.imageView)
        public ImageView contentImg;
        @ViewInject(R.id.contentSelecter)
        @SuppressWarnings("unused")
        public ImageView contentIsSelecter;
    }
}
</pre><pre name="code" class="java">布局文件1:R.layout.submit_kisekae_wallpaper_selector
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/submit_main_fragment_bg">
    <!-- 用户从本地选择壁纸或者图标 -->
    <GridView
            android:id="@+id/gridview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:numColumns="3"
            android:horizontalSpacing="12dp"
            android:verticalSpacing="10dp"
            android:padding="10dp"
            android:stretchMode="columnWidth"
            android:overScrollMode="never"
            android:scrollbarStyle="outsideOverlay"/>

</RelativeLayout>
</pre><pre name="code" class="java">布局文件2:R.layout.submit_kisekae_wallpaper_selector_item
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="187dp"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">

    <LinearLayout android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical"
                  android:padding="1px"
                  android:background="@drawable/wallpaper_select_border">

        <ImageView
                android:id="@+id/imageView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                tools:ignore="ContentDescription"
                />

    </LinearLayout>

    <ImageView
            android:id="@+id/contentSelecter"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:src="@drawable/content_select"
            android:layout_alignParentRight="true"
            android:visibility="gone"
            tools:ignore="ContentDescription"/>

</RelativeLayout>


抱歉!评论已关闭.