2017-07-20 8 views
0

私は次の問題があります:更新一覧画面の位置に応じてアイテムの外観を表示

私はアンドロイドアプリでListViewを持っています。このリストビューの各項目には、2つのTextView(たとえば、左右)があります。次のような効果が得られます:左のTextViewは常に表示され、右のTextViewは画面の上半分にある場合にのみ表示され、ユーザーがListViewをスクロールすると可視性が変化します。

+-------+ 
|l1 r1| 
|l2 r2| <= initial positions, r3 and r4 aren't displayed 
|l3  | 
|l4  | 
+-------+ 

+-------+ 
|l3 r3| 
|l4 r4| <= the user has scrolled the list up, r3 and r4 are displayed 
|l5  | 
|l5  | 
+-------+ 

どのようにこのような効果を達成するには?

私のListViewのは、私は)getViewメソッド(内部右のTextViewの可視性を変更することができて幸せだろうアダプターが

public class ItemAdapter extends BaseAdapter { 

Context ctx; 
LayoutInflater lInflater; 
private List<Item> items; 

.... 

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

    if (view == null) { 
     view = lInflater.inflate(R.layout.sample_list_item_view, viewGroup, false); 
    } 

    Item item = items.get(i); 
    ((TextView) view.findViewById(R.id.l)).setText(item.key); 
    ((TextView) view.findViewById(R.id.r)).setText(item.value); 
    return view; 
} 

}

のように見える、BaseAdapterから延長し、アダプタを使用して、リストがスクロールされているときはこのメソッドは呼び出されません。

答えて

0

私はBaseAdapterを理解する方法は、getViewメソッド()メソッドは、Androidは、画面に表示する項目を作成しているときにのみ呼ばれます。項目がすでに画面に表示されている場合、getView()は呼び出されません。

+0

正確には、このメソッド内での可視性の更新を妨げるものです。 – ekaerovets

+0

リストビューonScrollListenerを見てください。 https://stackoverflow.com/questions/28741645/how-to-implement-onscrolllistener-to-a-listview –

0

溶液を得る。

 listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(AbsListView absListView, int i) { 
     } 

     @Override 
     public void onScroll(AbsListView absListView, int i, int i1, int i2) { 
      for (int index = 0; index < i1; index++) { 
       View child = listView.getChildAt(index); 
       if (child != null) { 
        int[] out = new int[2]; 
        child.getLocationOnScreen(out); 
        int alpha = (800 - out[1]); 
        if (alpha < 0) alpha = 0; 
        if (alpha > 255) alpha = 255; 
        ((TextView) child.findViewById(R.id.r)).setTextColor(Color.argb(alpha, 60, 60, 60)); 
       } 
      } 
     } 
    }); 
関連する問題