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

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

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)
小葫芦

どの部分が理解できないのか、まったく理解できないのかわかりませんが、このコードは実際にはそれほど複雑ではありません。分解してみると理解しやすくなります。 2回に分けてお話します。

まず、コンストラクター
がリストビューにヘッダービューをロードするためにコンストラクターを初期化します。ビューがロードされていてもまだ表示されていない場合、混乱が生じる可能性があります。その幅と高さは -1 になるため、setPadding パラメータの準備として高さを取得するために、measure を手動で呼び出す必要があります。合成は measure で、最上位のパラメータが渡されます。 幸いなことに、Android では、ビューの位置は画面上の表示領域だけでなく、より広い領域まで抽象的に拡張できます。画面の外側なので、setPadding はビューの左上隅の位置をオフスクリーンの高さに設定することを意味し、初期化時にヘッダービューが画面の可視範囲内に表示されないことを意味します。私が描いたスケッチを見ると理解できます。スケッチの左上隅にある黄色の点は、コンストラクターが初期化された後の座標表現です。 left, top, right, bottom-height-height
2 番目はタッチイベント処理です

コンストラクターによって追加された非表示の だけで十分ですか?はい、それだけです!では、いつ変わるのか、どれくらい変わるのか?リストビュー上で指をスライドさせた分だけ変化するのでしょうか?はい、この処理を理解していれば、タッチイベント処理を見ると理解しやすくなります。 は指を押す動作、anxiaY は押された点の y 座標、
は指をスライドさせる動作で、スライド処理中の指の接触点の y 座標の変化を記録し、 anxiaY の値と比較して取得します。指のスライド距離に基づいてプルダウン アクションを実行できます。ヘッダービューの paddingTop 値を継続的に設定し、ビューを更新することで、ヘッダービューがスライドインまたはスライドアウトできるようになります。指のスライド距離に応じて画面の幅が変わります。 headerview如何显示?つまり、指のタッチが画面から離れてスライドを停止します。このとき、paddingTop の値は 改变headerview的paddingTop值 にリセットされ、headerview がリセットされ、全体が画面から離れ、コンストラクターがあったときの位置に戻ります。初期化され、プルダウン プロセス全体が完了します。 ACTION_DOWN

いいねを押す +0
阿神

過去の高さを構築し、Touch イベントをリッスンして頭の位置を更新します

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート