【发布时间】:2015-08-02 10:15:54
【问题描述】:
我正在尝试制作一个显示图像网格的简单网格视图。但是,某些事情使应用程序滞后非常糟糕。我收到一堆关于帧被跳过的警告,并且我可能在主线程上做了太多工作,但老实说我不知道我做错了什么。
我的适配器:
public class HeaderListAdapter extends BaseAdapter {
private List<HeaderInfo> headerList;
private int HEADER_SIZE;
private LayoutInflater layoutInflater;
public HeaderListAdapter(Activity context, List<HeaderInfo> headerList) {
this.headerList = headerList;
HEADER_SIZE = (context.getResources().getDimensionPixelSize(R.dimen.storeItemSelect_HeaderHeight));
layoutInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final HeaderInfo headerInfo = (HeaderInfo) this.getItem(position);
ViewHolder holder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.store_item_selection_header_card, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.headerImage.setImageDrawable(headerInfo.headerImage);
holder.headerSpace.setVisibility(position == 0 || position == 1
? View.VISIBLE
: View.GONE);
holder.headerName.setText(headerInfo.headerName);
return convertView;
}
public static class ViewHolder {
public ImageView headerImage;
public TextView headerName;
public Space headerSpace;
public ViewHolder(View v) {
headerImage = (ImageView) v.findViewById(R.id.header_image);
headerName = (TextView) v.findViewById(R.id.header_title);
headerSpace = (Space) v.findViewById(R.id.headerSpace);
}
}
public int Height() {
return (HEADER_SIZE + 32) * Math.round(headerList.size() / 2);
}
我的 onCreate 活动:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.store_item_selection_main);
Intent intent = getIntent();
storeName = intent.getStringExtra(EXTRA_STORE_NAME);
toolbar = (Toolbar) findViewById(R.id.toolbar);
backdrop = (ImageView) findViewById(R.id.backdrop);
collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
GridView testGridView = (GridView) findViewById(R.id.gridView);
headerItems = _HelperFunctions.getTempHeaderDB(this);
HeaderListAdapter expandableListAdapter = new HeaderListAdapter(this, headerItems);
testGridView.getLayoutParams().height = getHeight(expandableListAdapter.Height());
testGridView.setAdapter(expandableListAdapter);
testGridView.setNumColumns(2);
setupToolbar(toolbar, collapsingToolbar, storeName, backdrop);
LayoutAnimationController controller = AnimationUtils.loadLayoutAnimation(this, R.anim.recent_layout_controller);
testGridView.setLayoutAnimation(controller);
}
注意:getHeight() 方法只是获取正确的高度来设置列表视图,setupToolbar 只是设置我的可折叠工具栏。
如果您需要更多信息,请告诉我,感谢您的帮助!
【问题讨论】:
-
如果性能是问题,只需使用分析器
-
如果您的图像非常大,则需要一些时间才能将其缩小。考虑在后台线程上缩放它们并缓存结果。 developer.android.com/training/displaying-bitmaps/index.html
标签: android scroll android-gridview android-scrollview lag