我正在尝试Url
使用延迟加载将图像加载到我的画廊中,并且一切正常。当图像从站点加载时,它会显示ProgressBar
直到图像加载和消失。我已经尝试了所有方法,但它会根据我的要求跳过第一张图像以完美地加载和显示剩余图像。我检查了日志,结果是该getView
方法显示position
0
0
0
1
0
0
0
1
我是否有两个图像,因此它不显示第一个图像,因为它同时调用了三次,导致它在加载之前重新加载。所以我的问题是为什么它一次调用它三次。我已经搜索了很多关于这个的问题,但是有序列 0
1
0
1
,这不是问题。为什么会这样?
下面是我的一些代码。
这是我的习惯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>
请告诉我如何解决这个问题。我已经搜索了有关此职位问题的所有问题,但无法解决。