1. 程式人生 > >ListView的漸變。。淡入和淡出 第一個Item和最後一個Item

ListView的漸變。。淡入和淡出 第一個Item和最後一個Item

一些是查資料參考

<span style="font-size:18px;">public class AlphaListView extends ListView implements AbsListView.OnScrollListener {

    private int height;
    private int itemHeight;

    public AlphaListView(Context context) {
        super(context);
        init();
    }

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

    public AlphaListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        setOnScrollListener(this);
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {

    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        //將所有View的透明度設定為1
        for(int i = 0; i < getChildCount(); i++){
            getChildAt(i).setAlpha(1);
        }
        //得到第一個可見的View
        View v = getChildAt(0);
        if(v != null){
            //得到這個v的高度
            itemHeight = v.getHeight();
            //得到可見部分
            int visiableLength = v.getBottom();
            //得到可見不分部分比例
            float ratio = visiableLength * 1.0f / itemHeight;
            v.setAlpha(ratio);
        }
        //得到最後一個可見的View
        v = getChildAt(visibleItemCount - 1);
        if(v != null){
            //得到這個v的高度
            itemHeight = v.getHeight();
            //得到可見部分
            int visiableLength = height - v.getTop();
            //得到可見不分部分比例
            float ratio = visiableLength * 1.0f / itemHeight;
            v.setAlpha(ratio);
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        height = MeasureSpec.getSize(heightMeasureSpec);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}</span>
其中 setAlpha(0) 裡面的引數 0.00 到 1.00 設定百分比透明度
 // 對任何控制元件 View ListView ScrollView 都適用
        // 設定 逐漸消逝; 逐漸消失
        mListView.setVerticalFadingEdgeEnabled(true);
        // 設定消失的距離
        mListView.setFadingEdgeLength(100);

後來發現另一種更簡單的方法 可以直接通過View設定屬性