2016-05-23 6 views
4

次のような視点を達成するための方法を見つけようとしています。現時点で私はListviewを作成し、選択した項目を大きくしようとしました。しかし、私は選択した項目を常に私の見解の真ん中にすることはできません。だから私は数ピッカーでこれを取得しようとしている。Numberpicker Androidで選択した項目を修正する

しかし、私は分割バーを隠す方法を見つけておらず、選択したアイテムと他のビューを異なるものにしています。アイデアは、下のイメージのようなものになります。

誰かが私を助けてくれることを願っています!ありがとうございました!

enter image description here

答えて

2

私はリサイクルビューの中項目がより顕著になりたかった私のプロジェクトの一つ、にかなり類似した効果を達成するために望んでいました。 私の場合、その項目はフォーカスの印象を与えるためにのみ翻訳されていますが、その結果はあなたが記述しているものとかなり似ています。 正しい方向に進むために、ここにコードを投稿します:

//We're on the onCreateView in a fragment here 
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 

      //First I find the first visible element 
      int firstVisiblePosition = mLayoutManager.findFirstVisibleItemPosition(); 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
       if (firstVisiblePosition != -1) { 
        int lastVisiblePosition = mLayoutManager.findLastVisibleItemPosition(); 

        int itemHeight = mLayoutManager.getChildAt(0).getMeasuredHeight(); 
        int itemTop = mLayoutManager.getChildAt(0).getTop(); 

        //We use a '+' as itemTop will be negative 
        int delta = itemHeight + itemTop; 

        int currentItemToBeFocused = (delta < (itemHeight/2)) ? 1 : 0; 

        //Reset the z-translation of other items to 0 
        for (int i = 0, last = (lastVisiblePosition - firstVisiblePosition); i <= last; ++i) { 
         if (mLayoutManager.getChildAt(i) != null) { 
          mLayoutManager.getChildAt(i).setTranslationZ(0); 
         } 
        } 
        //And set the z-translation of the current "centered" item 
        if (mLayoutManager.getChildAt(currentItemToBeFocused) != null) { 
         mLayoutManager.getChildAt(currentItemToBeFocused).setTranslationZ(10); 
        } 
       } 
      } 
     } 

     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      super.onScrollStateChanged(recyclerView, newState); 
     } 
    }); 
3

私は、ListViewコントロールがNumberPickerよりも構成可能であると思います。あなたは何ができるか

は異なる行のレイアウトを使用しているdependindそれは中央の1等であれば、そう、あなたのgetViewメソッド(...)メソッドは、次のようになります。

public View getView(int position, View convertView, ViewGroup parent) { 
    if (position == 1) { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.focused_layout, parent, false); 
     // Do whatever with this view 

    } else { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.not_focused_layout, parent, false); 
     // Do whatever with this view 

    } 

    return convertView; 
} 

あなたがカスタマイズすることができます。この方法どちらのレイアウトもXMLとコードの両方で使用できます。 「特別な」アイテムを他の方法で使用したい場合は、条件を変更できます。続き

3

は、カスタムの表示値と番号ピッカーです:

final NumberPicker aNumberPicker = new NumberPicker(context); 
    List<Integer> ids = getIds(); 
    aNumberPicker.setMaxValue(ids.size()-1); 
    aNumberPicker.setMinValue(0); 
    mDisplayedIds = new String[ids.size()]; 
    for (int i = 0; i < ids.size(); i++) { 
     mDisplayedIds[i] = "Nombre"+String.valueOf(ids.get(i)) ; 
    } 
    aNumberPicker.setDisplayedValues(mDisplayedIds); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(50, 50); 
    RelativeLayout.LayoutParams numPickerParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    numPickerParams.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    relativeLayout.setLayoutParams(params); 
    relativeLayout.addView(aNumberPicker, numPickerParams); 

また、あなたはあなたが通常のために1つのホルダーと、この使用RecyclerViewを実装することができ、この1 AndroidPicker

3

のようないくつかのオープンソースのライブラリをチェックアウトすることができます選択されたアイテムのアイテムと1つのホルダー。

あなたRecyclerViewアダプタ内部

private static int SELECTED_ITEM_POSITION = 2; 
private static int NORMAL_ITEM = 1; 
private static int SELECTED_ITEM = 2; 

@Override 
public int getItemViewType(int position) 
{ 
    if(position == SELECTED_ITEM_POSITION) 
     return SELECTED_ITEM; 
    else 
     return NORMAL_ITEM; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
{ 
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); 
    if(viewType == SELECTED_ITEM) 
    { 
     YourSelectedViewHolder selectedViewHolder = (YourSelectedViewHolder)layoutInflater.inflate(R.layout.selected_item_layout, parent, false); 
     return selectedViewHolder; 
    } 
    else //viewType == NORMAL_ITEM 
    { 
     YourNormalViewHolder normalViewHolder = (YourNormalViewHolder)layoutInflater.inflate(R.layout.normal_item_layout, parent, false); 
     return normalViewHolder; 
    } 
} 
関連する問題