使用动画子视图提高listview的性能

时间:2014-04-08 19:13:05

标签: android performance android-listview android-animation

我有一个带有Button的ListView,它可以激活列表项中的其他视图。虽然我正在使用持有者模式,但每当重新使用视图时,重置这些动画列表项的位置确实需要花费太多时间。 有没有人知道如何在不放弃动画的情况下提高性能?它不像列表不可用,但滚动时总会有一点口吃,每当新的列表项出现时屏幕。这是(缩写)getView()代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    final SuggestionViewHolder holder;

    final Suggestion suggestion = getItem(position);


    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_suggestion, parent, false);

        holder = new SuggestionViewHolder();

        holder.content =  = (ViewGroup) convertView.findViewById(R.id.content);
        holder.openExternalLinksButton = (ImageButton) convertView.findViewById(R.id.btn_open_external_links);
        holder.externalLinks = (ViewGroup) convertView.findViewById(R.id.external_links);
        holder.closeExternalLinksButton = (ImageView) convertView.findViewById(R.id.btn_close_external_links);           

        convertView.setTag(holder);

    } else {
        holder = (SuggestionViewHolder) convertView.getTag();

        // reset values for re-use of holder
        holder.content.setScaleX(1);
        holder.content.setScaleY(1);
        holder.content.setAlpha(1);
        holder.content.setBlocked(false);
        holder.externalLinks.setTranslationY(0);        
    }        

    // animate external links to show them
    holder.openExternalLinksButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View anchor) {
            holder.content.animate().scaleX(0.9f).scaleY(0.9f).alpha(0.3f).start();
            holder.externalLinks.animate().setDuration(220).translationYBy(mExternalLinkWrapperTranslationY);
        }
    });

    // animate external links to hide them
    holder.closeExternalLinksButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder.content.animate().setDuration(220).scaleX(1f).scaleY(1f).alpha(1f).start();
            holder.externalLinks.animate().setDuration(220).translationY(0);
        }
    });       

    return convertView;
}

重复使用持有者" -part的重置值需要花费很多时间。

谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题...

我发现这篇文章可以帮助我提高alpha功能https://plus.google.com/+RomanNurik/posts/NSgQvbfXGQN

的性能

刚刚放

View.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
动画前的