android - 自定义下拉刷新列表.
PHP中文网
PHP中文网 2017-04-17 17:59:52
0
2
464

这里面的代码看不懂什么意思

public class MyListe extends ListView {

private View v;
private int height;
int anxiaY;
int huadongY;

@TargetApi(Build.VERSION_CODES.JELLY_BEAN) public MyListe(Context context, AttributeSet attrs) {
    super(context, attrs);
    v = View.inflate(context, R.layout.item2, null);
    v.measure(0, 0);
    height = v.getMeasuredHeight();
    v.setPadding(0, -height, 0, 0);
    addHeaderView(v);
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:
        anxiaY = (int) ev.getY();
        break;
    case MotionEvent.ACTION_UP:
        setPadding(0, -height, 0, 0);
        v.invalidate();
        invalidate();
        break;
    case MotionEvent.ACTION_MOVE:
        huadongY = (int) ((ev.getY()-anxiaY)*0.3);
        setPadding(0, huadongY-height, 0, 0);
        v.invalidate();
        invalidate();
        break;
    }
    return super.onTouchEvent(ev);
}

}

PHP中文网
PHP中文网

认证0级讲师

全部回覆(2)
小葫芦

不知道你是哪部分沒看懂還是都看不懂,這段程式碼其實並沒多複雜,把它分解一下就好理解了。我分兩部分說一下。

一是構造器
構造器初始化向listview裝載一個headerview,困惑之處可能在於measuresetPadding,一个view加载出来若尚未可见,它的width和height会是-1,所以需要手动调用measure去强制measure一下view的空间占用情况,目的是为了拿到height为setPadding做准备;到了setPadding,参数构成是left, top, right, bottom,传入的是top参数,请看好是-height,在android上,view的位置并非只有屏幕上可见的那点空间,它可以抽象延伸到屏幕外更宽广的区域,所以-height的意思是設置view的左上角的位置為屏幕外height,意思就是讓headerview初始化時不顯示在屏幕可見範圍內,看我畫的草圖可能好理解一點,草圖左上角黃點就是構造器初始化後的座標示意。

二是touch事件處理
構造器添加的不可見headerview如何显示?是不是就是改变headerview的paddingTop值就可以了?是的,就是那样!那怎么时候改变,改变多少?是不是就是应该手指在listview上滑动多少就改变多少呢?是的,就是那样,了解这个过程,再看touch事件处理就很好理解了。ACTION_DOWN即手指按下的动作,anxiaY即是按下的点的y坐标,ACTION_MOVE即手指滑动的动作,记录滑动过程手指触点y坐标的变化,和anxiaY值做比较,就得出手指滑动的距离,就可以做下拉动作了,不断的设置headerview的paddingTop值和刷新view,就可以达到headerview跟随手指滑动距离滑入或滑出屏幕了。ACTION_UP即手指触点离开屏幕,停止滑动,这时重新设置paddingTop值为-height,headerview就復位了,整體離開螢幕,回到構造器初始化時的位置,完成整個下拉過程。

阿神

構造裡面過去高度,然後監聽Touch事件,更新頭部位子

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板