느린로드를 사용하여 Url
에서 내 갤러리의 이미지를로드하려고하는데 모든 것이 정상적으로 작동합니다. 사이트에서 이미지를로드 할 때까지 ProgressBar
을 표시합니다. 모든 방법을 시도했지만 첫 번째 이미지를 건너 뛰고 내 요구 사항에 따라 나머지 이미지를 완벽하게 표시합니다. I 로그를 검사하고 그 결과 그것 로딩 전에 다시 일으키는 동시에 세 번 호출 될 때 첫 화상을 표시하지 않도록 나는 두 이미지가 있다면 getView
방법 position
0
0
0
1
0
0
0
1
를 나타내고 있다는 것이다. 그래서 제 질문은 한 번에 3 번 호출하는 이유입니다. 이것에 관한 많은 질문을 검색했지만 시퀀스는 0
1
0
1
이며 문제가되지 않습니다. 왜 그런가?GetView 0 번 위치가 3 번 반복되어 표시되는 첫 번째 이미지 건너 뛰기
다음은 일부 코드입니다.
이
여기 내 사용자 지정ImageView
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class WebImageView extends ImageView {
private Drawable image;
private ProgressBar placeholder;
public WebImageView(Context context) {
super(context);
}
public WebImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public WebImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setPlaceholderImage(int resid) {
View view = (View)this.getParent();
placeholder = (ProgressBar)view.findViewById(resid);
if (image == null) {
placeholder.setVisibility(View.VISIBLE);
}
}
@SuppressWarnings("deprecation")
public void setIt(Bitmap result){
image = new BitmapDrawable(result);
if (image != null) {
try{Thread.sleep(2000);}catch(Exception e){}
placeholder.setVisibility(View.GONE);
setImageDrawable(image);
}
}
}
내 CustomAdapter
이다.
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.smartsync.ImageCache;
import com.smartsync.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Toast;
public class ImageAdapter extends ArrayAdapter<URL> {
private Activity activity;
private int layoutResourceId;
private ArrayList<URL> data = new ArrayList<URL>();
ExecutorService exec;
private ImageCache cache;
public ImageAdapter(Context context, int layoutResourceId, ArrayList<URL> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.activity = (Activity)context;
exec = Executors.newSingleThreadExecutor();
this.data = data;
this.cache = new ImageCache(context);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
final URL url = data.get(position);
final WebImageView image;
if (row == null) {
row = activity.getLayoutInflater().inflate(layoutResourceId, parent, false);
image = (WebImageView) row.findViewById(R.id.webimage);
image.setPlaceholderImage(R.id.pbar);
this.notifyDataSetChanged();
row.setTag(image);
}
else
image = (WebImageView) row.getTag();
final ImageAdapter adapter = this;
/*if(position == 0){
row.setVisibility(View.GONE);
return row;
}*/
exec.execute(new Runnable(){
@Override
public void run() {
try {
Bitmap bitmap = null;
bitmap = cache.getBitmap(url);
if(bitmap == null){
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
options.outHeight = 100;
options.outWidth = 100;
options.inSampleSize = 5;
bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream(), null, options);
cache.setCache(bitmap, url);
}
final Bitmap bmp = bitmap;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
image.setIt(bmp);
adapter.notifyDataSetChanged();
}
});
} catch (Exception e) {
Log.i("test", ""+e);
}
}
});
return row;
}
}
그리고 이것은 단일 행에 대한 레이아웃입니다.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:orientation="vertical"
android:padding="5dp"
android:clickable="true"
android:focusable="true">
<com.smartsync.adapters.WebImageView
android:id="@+id/webimage"
android:background="@xml/border"
android:cropToPadding="true"
android:scaleType="centerCrop"
android:padding="3dip"
android:adjustViewBounds="true"
android:layout_width="100dp"
android:layout_height="100dp" />
<ProgressBar
android:id="@+id/pbar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
이 문제를 해결하는 방법을 알려주십시오. 이 직책 문제에 관한 모든 질문을 검색했지만 해결할 수 없었습니다.