2014-09-06 5 views
0

여러 이미지 선택기를 만들려고했는데 모든 것이 정상적으로 작동하지만 그리드 스크롤이 매우 느리고 속도가 느립니다. getView에서 이미지를로드 할 때 다른 라이브러리를 사용하려고했습니다. 주 :() 피카소, aquery ..) 하지만 심지어 AsyncTask를 가진 그것의 더 디퍼 런스 세라마이드는 내 코드 이잖아이미지를 sdcard에서 gridview로 천천히로드

public class Media extends ActionBarActivity { 

개인 aQuery 수성을,

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 al = new ArrayList (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 = 새로운 OnItemClickListener() { @Override 공공 무효 onItemClick (어댑터 뷰 AdapterView 부모,보기보기, INT 위치, 긴 ID) { 커서 커서 = 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; 

} } mediaAsynce :

MediaAsync은 AsyncTask를 확장

공용 클래스 { 개인 이미지 뷰 mImageView; private 컨텍스트 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); 

} }

+0

페이지 –

+0

가 ([링크] 참조 ...없는 http://vikaskanani.wordpress.com/2011/07/20/android- custom-image-gallery-in-checkbox-in-grid-to-select-multiple /) –

답변

0

당신이 피카소 라이브러리를 시도 말했듯이 그냥이 비동기 작업처럼 picassso 사용하여 다시 한 번 시도

를 작동해야하고 모든

필요하지 않습니다 간단한 어댑터를 만들고 이미지를로드하면됩니다.

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); 
    } 
} 

} 

OR

Try this example

관련 문제