我正在制作一个非常简单的应用程序(基本上是一个只有几张图片的ListView)。在我的测试设备上(一台带有原生Android系统的摩托罗拉Moto G)上表现良好。
然而,我想让我的ListView有点状分隔符。因此,我创建了一个list_divider.xml文件来定义分隔符,并将其设置为ListView中要使用的分隔符。我已经在我的Moto G上尝试过了,但它没有显示出虚线。
所以我在谷歌上搜索并发现了这里解决方案。禁用视图的硬件加速解决了错误并正确显示了分隔符。
然而,现在我又遇到了另一个问题:由于禁用了硬件加速,当滚动时应用程序开始变得卡顿。
是否有一种方法可以拥有虚线分隔符而不禁用硬件加速或者至少使性能与禁用之前相当?
编辑:以下是我使用的适配器代码:
编辑2:以下是两个相关的布局文件:
activity_main.xml
然而,我想让我的ListView有点状分隔符。因此,我创建了一个list_divider.xml文件来定义分隔符,并将其设置为ListView中要使用的分隔符。我已经在我的Moto G上尝试过了,但它没有显示出虚线。
所以我在谷歌上搜索并发现了这里解决方案。禁用视图的硬件加速解决了错误并正确显示了分隔符。
然而,现在我又遇到了另一个问题:由于禁用了硬件加速,当滚动时应用程序开始变得卡顿。
是否有一种方法可以拥有虚线分隔符而不禁用硬件加速或者至少使性能与禁用之前相当?
编辑:以下是我使用的适配器代码:
public class AstronautArrayAdapter extends ArrayAdapter<Astronaut> {
public static final String TAG = "AstronautArrayAdapter";
public AstronautArrayAdapter(Context context, List<Astronaut> objects) {
super(context, R.layout.astronauts_list_row, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RowViewHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater();
convertView = inflater.inflate(R.layout.astronauts_list_row, parent, false);
holder = new RowViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.nameOfAustronaut);
holder.daysInSpace = (TextView) convertView.findViewById(R.id.numberOfDaysInSpace);
holder.country = (ImageView) convertView.findViewById(R.id.countryImage);
holder.title = (TextView) convertView.findViewById(R.id.titleOfAstronaut);
convertView.setTag(holder);
} else {
holder = (RowViewHolder) convertView.getTag();
}
Astronaut astronaut = getItem(position);
holder.name.setText(astronaut.getName());
holder.daysInSpace.setText(Integer.toString(astronaut.getDaysInSpace()));
holder.country.setImageBitmap(astronaut.getCountryImage(getContext()));
holder.title.setText(astronaut.getTitle());
return convertView;
}
private static class RowViewHolder {
TextView name;
TextView daysInSpace;
ImageView country;
TextView title;
}
}
编辑2:以下是两个相关的布局文件:
activity_main.xml
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/astronautsList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="16dp"
android:dividerHeight="3dp"
android:divider="@drawable/list_divider"
android:layerType="software" />
list_divider.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line" >
<stroke
android:width="1px"
android:color="@android:color/black"
android:dashWidth="5px"
android:dashGap="1px" />
<size android:height="3dp" />
</shape>
holder.country.setImageBitmap(astronaut.getCountryImage(getContext()));
看起来你可能正在UI线程上进行Bitmap解码(甚至下载)。你是这样做的吗? - Budius