Android 将图像从SD卡缓慢加载到gridview

Android 将图像从SD卡缓慢加载到gridview,android,gridview,adapter,Android,Gridview,Adapter,我一直在尝试创建多个图像选择器,一切正常,但网格滚动非常缓慢,我一直在尝试使用不同的库在getView()中加载图像(毕加索,阿奎里…) 但是没有区别,即使使用asynctask,这也是我的代码: 主要内容: 公共类媒体扩展了ActionBarActivity{ 私人水渠; GridView myGridView; MyAdapter mySimpleCursorAdapter; 布尔值isOddClicked=true; 静态字符串img=null; 最终Uri srcUri=MediaSto

我一直在尝试创建多个图像选择器,一切正常,但网格滚动非常缓慢,我一直在尝试使用不同的库在
getView()中加载图像(毕加索,阿奎里…)
但是没有区别,即使使用
asynctask
,这也是我的代码: 主要内容:

公共类媒体扩展了ActionBarActivity{
私人水渠;
GridView myGridView;
MyAdapter mySimpleCursorAdapter;
布尔值isOddClicked=true;
静态字符串img=null;
最终Uri srcUri=MediaStore.Images.Media.EXTERNAL\u CONTENT\u Uri;
最终字符串srcData=MediaStore.Images.Media.DATA;
最后一个字符串srcImgId=MediaStore.Images.Media.\u ID;
最终Uri thumbUri=MediaStore.Images.Thumbnails.EXTERNAL\u CONTENT\u Uri;
最终字符串thumb_DATA=MediaStore.Images.Thumbnails.DATA;
最终字符串thumb\u IMAGE\u ID=MediaStore.Images.Thumbnails.IMAGE\u ID;
ArrayList al=新的ArrayList(5);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.media);
//总是显示菜单
试一试{
ViewConfiguration=ViewConfiguration.get(这个);
Field menuKeyField=ViewConfiguration.class.getDeclaredField(“sHasPermanentMenuKey”);
if(menuKeyField!=null){
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(配置,false);
} 
}捕获(例外情况除外){}
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
myGridView=(GridView)findViewById(R.id.GridView);
// 
游标装入器游标装入器=新游标装入器(
这个,srcUri,null,null,null,MediaStore.Images.Media.DATE_take+“DESC”);
//
Cursor Cursor=cursorLoader.loadInBackground();
//
int[]to={android.R.id.text1};
字符串[]from={MediaStore.MediaColumns.TITLE};
mySimpleCursorAdapter=新的MyAdapter(
这个,android.R.layout.simple\u list\u item\u 1,
游标、从、到游标或适配器。标志(寄存器、内容、观察者);
//
setAdapter(mySimpleCursorAdapter);
myGridView.setOnItemClickListener(myOnItemClickListener);
}    
OnItemClickListener myOnItemClickListener=新建OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Cursor Cursor=mySimpleCursorAdapter.getCursor();
光标。移动位置(位置);
int_ID=cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media.ID));
}
};
私有位图缩略图(int-id){
String[]thumbColumns={srcData,srcImgId};
游标装入器拇指游标装入器=新游标装入器(
这个,srcUri,thumbpolumns,srcImgId+“=”+id,null,null);
Cursor thumbCursor=thumbCursorLoader.loadInBackground();
位图拇指位图=空;
if(thumbCursor.moveToFirst()){
int thCulumnIndex=thumbCursor.getColumnIndex(srcData);
String thumbPath=thumbCursor.getString(thCulumnIndex);
Toast.makeText(getApplicationContext(),thumbPath,Toast.LENGTH_LONG.show();
thumbBitmap=BitmapFactory.decodeFile(thumbPath);
//创建一个对话框以显示缩略图
AlertDialog.Builder thumbDialog=新建AlertDialog.Builder(Media.this);
ImageView thumbView=新的ImageView(Media.this);
thumbView.setImageBitmap(thumbBitmap);
LinearLayout布局=新的LinearLayout(Media.this);
布局。设置方向(线性布局。垂直);
layout.addView(thumbView);
thumbDialog.setView(布局);
thumbDialog.show();
}否则{
Toast.makeText(getApplicationContext(),“无缩略图!”,Toast.LENGTH_LONG.show();
}
返回拇指位图;
}
公共类MyAdapter扩展了SimpleCursorAdapter{
游标myCursor;
语境;
公共MyAdapter(上下文上下文、int布局、光标c、字符串[]从、int[]到、int标志){
super(上下文、布局、c、from、to、标志);
myCursor=c;
myContext=上下文;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
LayoutInflater充气机=getLayoutInflater();
convertView=充气机。充气(R.layout.media_行,父级,false);
holder=新的ViewHolder();
holder.thumboil=(ImageView)convertView.findViewById(R.id.thumb);
holder.title=(复选框)convertView.findViewById(R.id.itemCheckBox);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
myCursor.moveToPosition(位置);
final int myID=myCursor.getInt(myCursor.getColumnIndex(MediaStore.Images.Media._ID));
最终字符串[]thumbColumns={srcData,srcImgId};
游标装入器拇指游标装入器=新游标装入器(
myContext、srcUri、thumbColumns、srcImgId+“=”+myID、null、null);
Cursor thumbCursor=thumbCursorLoader.loadInBackground();
if(thumbCursor.moveToFirst()){
final int thCulumnIndex=thumbCursor.getColumnIndex(thumb_数据);
最终字符串thumbPath=thumbCursor.getString(thCulumnIndex);
位图o=MediaStore.Images.Thumbnails.getThumbnail(getApplicationContext().getContentResolver(),myID,Images.Thumbnails.MICRO_-KIND,null);
//holder.thumbnail.setImageBitmap(o);
//第二阶段:
字符串uri=null;
Cursor Cursor=MediaStore.Images.缩略图
public class Media extends ActionBarActivity {
    private AQuery aq;

    GridView myGridView;
    MyAdapter mySimpleCursorAdapter;    
    boolean isOddClicked = true;
    static String img=null;
    final Uri srcUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    final String srcData  = MediaStore.Images.Media.DATA;
    final String srcImgId = MediaStore.Images.Media._ID;    
    final Uri thumbUri = MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI;
    final String thumb_DATA = MediaStore.Images.Thumbnails.DATA;
    final String thumb_IMAGE_ID = MediaStore.Images.Thumbnails.IMAGE_ID;
    ArrayList<String> al = new ArrayList<String>(5);

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


        //Always show the menu
        try {
            ViewConfiguration config = ViewConfiguration.get(this);
            Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
            if(menuKeyField != null) {
                menuKeyField.setAccessible(true);
                menuKeyField.setBoolean(config, false);
            } 
        } catch (Exception ex) {}
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true); 
        myGridView = (GridView)findViewById(R.id.gridview);        
        // 
        CursorLoader cursorLoader = new CursorLoader(
          this,srcUri,null,null,null,MediaStore.Images.Media.DATE_TAKEN+ " DESC");
        //
        Cursor cursor = cursorLoader.loadInBackground();
        //
        int[] to = {android.R.id.text1};
        String[] from = {MediaStore.MediaColumns.TITLE};
        mySimpleCursorAdapter = new MyAdapter(
          this,android.R.layout.simple_list_item_1, 
            cursor,from,to,CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        //
        myGridView.setAdapter(mySimpleCursorAdapter);
        myGridView.setOnItemClickListener(myOnItemClickListener);
    }    

    OnItemClickListener myOnItemClickListener = new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
            Cursor cursor = mySimpleCursorAdapter.getCursor();
            cursor.moveToPosition(position);
            int int_ID = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID));
        }
    };

    private Bitmap getThumbnail(int id){
        String[] thumbColumns = {srcData, srcImgId};
        CursorLoader thumbCursorLoader = new CursorLoader(
      this,srcUri,thumbColumns,srcImgId + "=" + id,null,null);        
    Cursor thumbCursor = thumbCursorLoader.loadInBackground();
    Bitmap thumbBitmap = null;
    if(thumbCursor.moveToFirst()){
            int thCulumnIndex = thumbCursor.getColumnIndex(srcData);
            String thumbPath = thumbCursor.getString(thCulumnIndex);
            Toast.makeText(getApplicationContext(),thumbPath,Toast.LENGTH_LONG).show();         
            thumbBitmap = BitmapFactory.decodeFile(thumbPath);          
          //Create a Dialog to display the thumbnail
            AlertDialog.Builder thumbDialog = new AlertDialog.Builder(Media.this);
            ImageView thumbView = new ImageView(Media.this);
            thumbView.setImageBitmap(thumbBitmap);
            LinearLayout layout = new LinearLayout(Media.this);
      layout.setOrientation(LinearLayout.VERTICAL);
      layout.addView(thumbView);
      thumbDialog.setView(layout);
      thumbDialog.show();           
        }else{
            Toast.makeText(getApplicationContext(),"NO Thumbnail!",Toast.LENGTH_LONG).show();
        }
    return thumbBitmap;
    }
    public class MyAdapter extends SimpleCursorAdapter{
    Cursor myCursor;
      Context myContext;
        public MyAdapter(Context context, int layout, Cursor c, String[] from,int[] to, int flags) {
            super(context, layout, c, from, to, flags);         
            myCursor = c;
          myContext = context;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            if (convertView == null) {
                LayoutInflater inflater=getLayoutInflater();
                convertView =inflater.inflate(R.layout.media_row, parent, false);   
             holder = new ViewHolder();
            holder.thumbnail = (ImageView)convertView.findViewById(R.id.thumb);
            holder.title = (CheckBox) convertView.findViewById(R.id.itemCheckBox);  
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
            myCursor.moveToPosition(position);
            final int myID = myCursor.getInt(myCursor.getColumnIndex(MediaStore.Images.Media._ID));
            final String[] thumbColumns = {srcData ,srcImgId};
            CursorLoader thumbCursorLoader = new CursorLoader(
              myContext,srcUri,thumbColumns,srcImgId + "=" + myID,null,null);
            Cursor thumbCursor = thumbCursorLoader.loadInBackground();          
        if(thumbCursor.moveToFirst()){
          final int thCulumnIndex = thumbCursor.getColumnIndex(thumb_DATA);
              final String thumbPath = thumbCursor.getString(thCulumnIndex);
                Bitmap o = MediaStore.Images.Thumbnails.getThumbnail(getApplicationContext().getContentResolver(), myID, Images.Thumbnails.MICRO_KIND, null);
                //holder.thumbnail.setImageBitmap(o);
            //Phase II:
                String uri = null;
                Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(
          getContentResolver(), myID,
          MediaStore.Images.Thumbnails.MINI_KIND,null );
                if( cursor != null && cursor.getCount() > 0 ) {
                  cursor.moveToFirst();//**EDIT**
                  uri = cursor.getString( cursor.getColumnIndex( MediaStore.Images.Thumbnails.DATA ) );
                }

                MediaAsync loadAsync = new MediaAsync(getApplicationContext(), holder.thumbnail);
                loadAsync.onPostExecute(thumbPath);
                /*
                holder.thumbnail.setOnClickListener(new OnClickListener(){
          public void onClick(View v){
            img = thumbPath;
            al.add(thumbPath); 
            if (holder.title.isChecked()) {
              holder.title.setChecked(false);
              holder.thumbnail.setBackgroundResource(0);
            }else{
              holder.title.setChecked(true);
              holder.thumbnail.setBackgroundResource(R.drawable.media_row_border);
            }
          }
       });
       */
            }           
            return convertView ;
        }

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.media, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {
            finish();
        }
        else if (id == R.id.done) {
            Intent main = new Intent(this, Main.class);
            main.putStringArrayListExtra("media_lst", al);
            startActivity(main);
        }
        return super.onOptionsItemSelected(item);
    }
    private static class ViewHolder {
        ImageView thumbnail;
        CheckBox title;
    }
}
public class MediaAsync extends AsyncTask<String,String, String>{
    private ImageView mImageView;
    private Context mContext;

    public  MediaAsync(Context context,ImageView imageView) {
        mImageView = imageView;
        mContext   = context;
    }

    @Override
    protected String doInBackground(String... params) {
        String url = params[0].toString();
        return url;
    }

    @Override
    protected void onPostExecute(String result) {
        Uri uri = Uri.fromFile(new File(result));

        Picasso.with(mContext)
        .load(uri)
        //.resize(100, mWidth)
        .into(mImageView);
        //  AQuery aq = new AQuery(mContext);
        //  aq.id(mImageView).image(result,  true, true, 0, R.drawable.ic_launcher);

    }
}
public class GridViewDynamicAdapter extends BaseDynamicGridAdapter {
ImageDetails details;
public static List<ImageDetails> list;

public GridViewDynamicAdapter(Context context, List<ImageDetails> items,
        int columnCount) {
    super(context, items, columnCount);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    CheeseViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(
                R.layout.item_grid, null);
        holder = new CheeseViewHolder(convertView);
        convertView.setTag(holder);
    } else {
        holder = (CheeseViewHolder) convertView.getTag();
    }
    if (position == getCount() - 1) {
        ImageApplication.fromRecorderPaths = (List<ImageDetails>) getItems();
    }
    details = (ImageDetails) getItem(position);
    // Log.d("Setting=", details.path);
    holder.build(getContext(), details.path);
    return convertView;
}

private class CheeseViewHolder {
    private ImageView image;

    private CheeseViewHolder(View view) {
        image = (ImageView) view.findViewById(R.id.item_img);
    }

    void build(final Context context, String title) {
        Picasso.with(context).load(new File(title)).centerCrop()
                .resize(150, 150).error(R.drawable.ic_launcher).into(image);
    }
}

}