作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有缩略图的 ListView 。我正在从 url 获取缩略图。下载缩略图时,我会显示一个微调器。
问题
在 ListView 开始时,所有微调器几乎同时被下载的图像替换。微调器卡住, ListView 卡住 0.5 秒。
当我以明显的速度滚动浏览我的 ListView 时,会发生同样的情况。
问题
我怎样才能加快我的 ListView ,并使其再次流畅?我应该在后台执行一些任务,还是一张一张地下载和设置图像。还是别的什么?
获取 View
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = mInflater.inflate(R.layout.listview_row, null);
}
UrlImageView thumb = (UrlImageView) convertView.findViewById(R.id.thumbnail);
final Video video = videos.get(position);
// Set the image for the list item
thumb.setImageDrawable(video.getThumbUrl());
return convertView;
}
我还注意到,如果我使用 if(convertView == null){ 来回收列表项,有时会显示错误的缩略图。
UrlImageView
package com.package;
import static android.app.Activity.RESULT_CANCELED;
import static android.app.Activity.RESULT_OK;
import imports;
public class UrlImageView extends LinearLayout {
private Context mContext;
private Drawable mDrawable;
private ProgressBar mSpinner;
private ImageView mImage;
public UrlImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public UrlImageView(Context context) {
super(context);
init(context);
}
private void init(final Context context) {
mContext = context;
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics());
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics());
mImage = new ImageView(mContext);
mImage.setLayoutParams(new LayoutParams(width,height));
mImage.setScaleType(ScaleType.CENTER_CROP);
mImage.setVisibility(View.VISIBLE);
mSpinner = new ProgressBar(mContext);
mSpinner.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
mSpinner.setIndeterminate(true);
addView(mSpinner);
addView(mImage);
}
/**
* Set's the view's drawable, this uses the internet to retrieve the image
* don't forget to add the correct permissions to your manifest
*
* @param imageUrl the url of the image you wish to load
*/
public void setImageDrawable (final String imageUrl) {
mDrawable = null;
mSpinner.setVisibility(View.VISIBLE);
mImage.setVisibility(View.VISIBLE);
new Thread() {
public void run() {
try {
mDrawable = getDrawableFromUrl(imageUrl);
imageLoadedHandler.sendEmptyMessage(RESULT_OK);
} catch (MalformedURLException e) {
imageLoadedHandler.sendEmptyMessage(RESULT_CANCELED);
} catch (IOException e) {
imageLoadedHandler.sendEmptyMessage(RESULT_CANCELED);
}
};
}.start();
}
/**
* Callback that is received once the image has been downloaded
*/
private final Handler imageLoadedHandler = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case RESULT_OK:
mImage.setImageDrawable(mDrawable);
mImage.setVisibility(View.VISIBLE);
mSpinner.setVisibility(View.GONE);
break;
case RESULT_CANCELED:
default:
// possible fail image
break;
}
return true;
}
});
private static Drawable getDrawableFromUrl (final String url) throws IOException, MalformedURLException {
return Drawable.createFromStream(((java.io.InputStream) new java.net.URL(url).getContent()), "name");
}
}
最佳答案
关于android - 带有缩略图的 ListView 滚动不流畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20311817/
我有一个具有可变数量子元素的固定大小的 div。我不知道 children 的大小。目标是缩小它们以适合父级。 例子: .parent { width: 100px; height: 100p
我是一名优秀的程序员,十分优秀!