10

1つの固定ヘッダーとx個の「プッシュアップ」ビューを含むカスタムlistViewがあり、リストビューの上にプッシュして非表示にすることができます。

それらを説明するために画像を添付しました。お客様のロゴなどを隠すためだけに「黒の検閲」でごめんなさい。

私の問題は、固定されたヘッダービューにパディングを追加すると、リストビューアイテムがその背後に浮かぶことです。

固定されたヘッダービューは、PinnedHeaderListViewを検索した場合と同じ手法で実装されます。つまり、静的ビューとリストビューのヘッダーです。

パディングを有効にする方法を見つけました。これは、固定ヘッダーと同じパディングを実際のlistViewに適用することですが、静的ヘッダーが表示されている場合に限ります。

ただし、setPaddingを呼び出すと、かなり目に見えるJankが発生しますが、これを削除したいと思います。誰かがこのジャンクを取り除く方法を知っていますか?

単純なビューとダミーデータを備えた単純なアプリケーションがありますが、このジャンクは表示されないため、ジャンクの量はセルレイアウトの複雑さに依存する可能性があります。

private void updateIfShouldShowStaticHeaderView() {

    //unfortunately setting the padding of the listView causes JANK.

    //any ideas?
    int bottomOfFloatingHeader = floatingHeader.getBottom();
    if (bottomOfFloatingHeader < mHeaderViewHeight) {
        staticHeaderViewIsVisible = true;
        staticHeader.setVisibility(View.VISIBLE);

        //need to set padding of listView to avoid having list-view items float behind my padded static header
        setPadding(0, staticHeader.getPaddingTop(), 0, getPaddingBottom());
    } else {
        staticHeaderViewIsVisible = false;
        staticHeader.setVisibility(View.INVISIBLE);
        //need to set padding of listView to avoid having list-view items float behind my padded static header
        setPadding(0, 0, 0, getPaddingBottom());
    }
}

最初に、押し上げられたヘッダーを示す画像があります プッシュアップされたヘッダーを表示する

これは、パッド付きの静的ピン留めビューの背後に物事がどのように描画されるかを示す画像です。listViewのパディングを調整すると、意図したとおりに機能することに注意してください。ただし、静的ヘッダービューのオン/オフを切り替えるときに、Jank(スローダウン)が発生します。

パディングを調整しない場合に表示されるエラーを表示する

4

2 に答える 2

1

あなたの質問についてもう少し情報が必要です。

私の理解では、Jankは、使用している大量のデータとドローアブルによるものです。

ビューのハードウェアアクセラレーションを有効にしてみてください。

ハードウェアアクセラレーションの詳細については、こちらのhttp://developer.android.com/guide/topics/graphics/hardware-accel.htmlをお試しください

于 2012-08-23T19:45:05.617 に答える
0

listViewのsetPaddingはレイアウト呼び出しを引き起こすため、特に複雑なlistViewセルの場合は非常に非効率的です。解決策は、必要なパディングを表すピン留めされたヘッダーに背景グラフィックを追加することです。これは、固定されたヘッダー全体が固定されていることを意味します。リストビューの要素は、このグラフィックの背後に描画されます。これが私たちが最終的に得た解決策です。

動作しますが、listViewをクリップする方がよいでしょう。

于 2013-08-16T13:44:39.540 に答える