そのため、 Ajax 呼び出しを介して Async ImageLoading Library を(lib name is Aquery)
使用して Web から画像をストリーミングするカスタム GalleryAdapter があります。
私がウェブからストリーミングした画像には、対応するオーディオトラックもあり、すべての画像に対応しているため、画像が同時に読み込まれるときに非同期で呼び出す必要があります。
すなわち
画像ファイル -> http://myserver.com/img1.png
サウンドトラック -> http://myserver.com/img1.mp3
ポイント番号 1、私は自分のカスタム内でこのすべてを行います
ImageAdapter
。getView
メソッド内から別のスレッドを呼び出しますか?私がやっていること ->
getView()
メソッドが2 回呼び出されます。呼び出しに基づいてトラックが複数回再生されるため、1 回だけ呼び出されるように制御できますか?
これは私のカスタムアダプタークラスです
private class MainImageAdapter extends ArrayAdapter<String> {
List<String> pagedImages;
private Context context;
public MainImageAdapter(Context context,int resid, List<String> objects ) {
super( context, resid, objects );
this.context=context;
this.pagedImages=objects;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return pagedImages.size();
}
@Override
public String getItem(int position) {
// TODO Auto-generated method stub
return pagedImages.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return pagedImages.get(position).hashCode();
}
@SuppressWarnings("deprecation")
public View getView(final int position, View convertView, ViewGroup parent) {
View v;
if ( convertView == null ) {
v = LayoutInflater.from(context).inflate(R.layout.imagebook, parent, false);
} else {
v = convertView;
}
System.out.println("getview called with"+position);
final ImageView im=(ImageView) v.findViewById(R.id.pagedimage);
positionMusic=position;
aq.id(im).image(pagedImages.get(position), true, true, 0, 0, new BitmapAjaxCallback(){
@Override
public void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status){
iv.setImageBitmap(bm);
//This should be called only once somehow
mPlayer = MediaPlayer.create(MainActivity.this, Uri.parse(pagedImages.get(position).replace(".png", ".mp3")));
mPlayer.start();
}
});
return v;
}
}