android硬件加速(View.LAYER_TYPE_SOFTWARE)与GridView for ScrollView 显示问题

直奔主题:

GridView放在ScrollerView中是无法正常显示的,这个问题网上讨论比较多,大家也都比较清楚,主要做法是自定义一个GridView,如下:

package com.ecity.xinao.ui.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.GridView;

public class PhotoHistoryItemGridView extends GridView {

    public PhotoHistoryItemGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public PhotoHistoryItemGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PhotoHistoryItemGridView(Context context) {
        super(context);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

但我这样做了之后,发现一个问题,当这个GridView放入ScrollView中时,当高度不超过手机屏幕时,是可以正常显示的,但是当高度超过手机时,发现GridView中的Item都不能正常显示了,一片空白,如下图

android硬件加速(View.LAYER_TYPE_SOFTWARE)与GridView for ScrollView 显示问题_第1张图片

百度好久,未果。。。。

发现我的代码中有一行:sectionViewPhoto.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

大家应该都知道,这是开启硬件加速的,这是View用来关闭硬件加速的,为了让view显示更平滑,在这里我是为了显示用shape画的虚线。

但是 目前,Android对硬件加速的支持并非完美,有些绘制操作在开启硬件加速的情况下不能正常工作(具体的列表可以参考Android开发者文档)。

注释掉这行代码后,GridView显示正常:

android硬件加速(View.LAYER_TYPE_SOFTWARE)与GridView for ScrollView 显示问题_第2张图片


希望能帮到一些朋友。


你可能感兴趣的:(android硬件加速(View.LAYER_TYPE_SOFTWARE)与GridView for ScrollView 显示问题)