좋아, 나는 지금 내 사진 갤러리를 며칠 동안 최적화하려고 노력 해왔다. (이것은 내 안드로이드 프로젝트 다.) 모든 사진은 웹 페이지를 통해로드됩니다. 유니버설 이미지 로더를 사용하기 시작했으나 결과가 만족스럽지 않습니다.유니버설 이미지 로더의 올바른 사용
여기 내 클래스의 :
public class Galerija extends Activity {
ArrayList<RSSItem> lista = new ArrayList<RSSItem>();
ArrayList<String> lst_slika = new ArrayList<String>();
RSSItem tempItem = new RSSItem();
ImageAdapter adapter;
ImageLoader imageLoader;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_galerija);
try
{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader myReader = sp.getXMLReader();
URL url = new URL("http://erdut.gausstesting.info/generateXML/galerija.php");
XMLHandler myXMLHandler = new XMLHandler();
myReader.setContentHandler(myXMLHandler);
myReader.parse(new InputSource(url.openStream()));
lista = myXMLHandler.getRss_lista();
lst_slika = lista.get(0).getImages();
} catch (Exception e) {
System.out.println(e);
}
adapter = new ImageAdapter(this, lst_slika);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(adapter);
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
}
});
}
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<String> lista;
/*
final ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this.mContext)
.enableLogging()
.memoryCacheSize(41943040)
.discCacheSize(104857600)
.threadPoolSize(10)
.build();
*/
final DisplayImageOptions options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.ic_stub)
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.cacheInMemory()
.cacheOnDisc()
.build();
public ImageAdapter(Context c, ArrayList<String> lista) {
this.mContext = c;
this.lista = lista;
imageLoader = ImageLoader.getInstance();
//imageLoader.init(config);
imageLoader.init(ImageLoaderConfiguration.createDefault(c));
}
public int getCount() {
return lista.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
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);
//ova 3 polja označavaju veličinu, cropanje i padding prikazanih slika
imageView.setLayoutParams(new GridView.LayoutParams(150, 150));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(0, 0, 0, 0);
} else {
imageView = (ImageView) convertView;
}
imageLoader.displayImage(lista.get(position), imageView, options);
//new ImageDownloadTask(imageView).execute(lista.get(position));
return imageView;
}
}
가}
그것은 내 이전 솔루션에 비해 일을 질주 확실히있다,하지만 난 만족하지입니다. 우선 HTC Incredible S에서 시작할 수 없습니다. 그냥 검은 색 화면이 나타나고 아무것도로드하지 않습니다. 왜 그런가요?
에뮬레이터에서만 작동하지만 스크롤 할 때 모든 이미지가 다시로드됩니다. 따라서 아래로 스크롤 한 다음 백업하면 모든 이미지가 다시로드 된 것처럼 보입니다. 그게 어떻게 일하는거야? 내가 이것을 향상시킬 수있는 다른 방법은 없을까?
미리 감사드립니다.
감사에서
. 구문 분석을 AsyncTask로 이동하고 성능을 더욱 향상 시키려면 ViewHolders를 살펴 봅니다. 유일한 문제는 여전히 내 휴대 전화에서 작동하지 않는다는 것입니다. 나는 잘 작동하는 다른 listview 액티비티들을 가지고 있지만 photogallery는 아무 것도로드하지 않는다. 그러나 모든 것이 에뮬레이터에서 올바르게 작동합니다. –
나는 내 응용 프로그램에서 picasa에서 json을 imageurls로 파싱하여 큰 이미지를 다운로드 할 때 uil을 사용했습니다. 그것은 내 장치에서 잘 작동했습니다. 네가 제대로하면 네가 잘 돌아 가지 못할 이유가 없어. – Raghunandan
뷰홀을 사용하는 경우 잘 동작해야합니다. viewholder 구현 – Raghunandan