2012-07-12 5 views
10

私は1つの固定ヘッダーとリストビューの上にプッシュアップして隠すことができるx個のプッシュアップビューを含むカスタムlistViewを持っています。固定ヘッダ付きのカスタムListViewで、パディングを設定するときにJankが発生する

画像を添付して説明しています。 "黒い検閲"のために申し訳ありません、顧客のロゴなどを隠すだけです。

私の問題は、固定ヘッダービューにパディングを追加すると、その背後に浮かぶリストビュー項目を取得することです。

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

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

しかし、setPaddingを呼び出すと、削除したいJunkがかなり目立つようになります。 誰もこのジャンクを取り除く方法を知っていますか?

私はこのジャンクを表示しない単純なビューとダミーデータを持つ単純なアプリケーションを持っているので、ジャンクの量はセルレイアウトの複雑さに依存しています。ここではまず

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()); 
    } 
} 

ここで押し上げられたヘッダ showing the pushed-up headers

を示す画像は、物事がパディングされた静的固定ビューの後ろに描画されるかを示す画像です。 listViewのパディングを調整するとインテントとして機能することに気づくはずですが、静的ヘッダービューをオン/オフするときにJank(スローダウン)が発生します。

showing the error that is visible if I do not adjust padding

+5

+1すごい素敵な画像、クールなアートワーク:) –

+0

plzそれはあなたの質問からですが、どのようにあなたのリストビューとアプリケーションのレイアウトを整理しましたか教えていただけますか? – Angelika

答えて

0

を試してみてください、それは特に複雑なリストビュー細胞とのケースで、非常にineffecientになります。解決方法は、必要なパディングを表すピン付きヘッダーに背景グラフィックを追加することです。これは、ピンヘッダー全体が固いことを意味します。リストビューの要素は、このグラフィックスの背後に描画されます。これが私たちが解決した解決策です。

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

1

あなたの質問を超えるいくつかのより多くの情報が必要。

私の理解したように、Jankはあなたが使用している膨大な量のデータとドロウアブルが原因です。

ビューのハードウェアアクセラレーションを有効にしてください。リストビューにsetPaddingするレイアウトの呼び出しの原因となりますので、HWアクセラレーションの詳細については

このhttp://developer.android.com/guide/topics/graphics/hardware-accel.html

関連する問題