Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Numberpicker Android中修改所选项目_Android_Xml_Listview_Numberpicker - Fatal编程技术网

在Numberpicker Android中修改所选项目

在Numberpicker Android中修改所选项目,android,xml,listview,numberpicker,Android,Xml,Listview,Numberpicker,我在想办法实现下一种观点。目前,我已经尝试创建一个Listview,只是将所选项目放大。但我不能让选择的项目总是在我的视野中。所以现在我想用一个数字签名器得到这个 但是我没有找到任何方法隐藏分隔条,并使所选项目与视图的其余部分不同。想法是在底部图像中获得类似的内容 我认为ListView可能比NumberPicker更具可配置性 您可以使用不同的行布局dependind,如果它是中间的或其他的,那么您的getView(…)方法如下所示: public View getView(int posit

我在想办法实现下一种观点。目前,我已经尝试创建一个Listview,只是将所选项目放大。但我不能让选择的项目总是在我的视野中。所以现在我想用一个数字签名器得到这个

但是我没有找到任何方法隐藏分隔条,并使所选项目与视图的其余部分不同。想法是在底部图像中获得类似的内容


我认为ListView可能比NumberPicker更具可配置性

您可以使用不同的行布局dependind,如果它是中间的或其他的,那么您的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和代码中自定义这两种布局。如果您想以任何其他方式更改“特殊”项,您可以更改条件。

下面是一个带有自定义显示值的数字选择器:

 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);
final NumberPicker aNumberPicker=新NumberPicker(上下文);
List id=getid();
aNumberPicker.setMaxValue(id.size()-1);
aNumberPicker.setMinValue(0);
mDisplayedIds=新字符串[ids.size()];
对于(int i=0;i

此外,您还可以查看一些类似于此的开放源代码库

您可以使用RecyclerView实现此功能,其中一个支架用于普通项目,另一个支架用于所选项目

在您的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;
    }
}

我想在我的一个项目上实现一个非常类似的效果,我希望我的回收者视图的中间项目更加突出。 在我的例子中,上面提到的项目只是z-翻译来给人一种焦点的印象,但结果与您描述的非常相似。 我将在这里发布我的代码,以防它能帮助您朝着正确的方向前进:

//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);
        }
    });
//我们在onCreateView的一个片段中
mrecycleView.addOnScrollListener(新的RecycleView.OnScrollListener(){
@凌驾
已填空的公共空间(RecyclerView RecyclerView、int dx、int dy){
super.onScrolled(recyclerView、dx、dy);
//首先,我找到第一个可见元素
int firstVisiblePosition=mLayoutManager.findFirstVisibleItemPosition();
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP){
如果(firstVisiblePosition!=-1){
int lastVisiblePosition=mLayoutManager.findLastVisibleItemPosition();
int itemHeight=mLayoutManager.getChildAt(0.getMeasuredHeight();
int itemTop=mLayoutManager.getChildAt(0.getTop();
//我们使用“+”作为itemTop的负数
int delta=项目高度+项目顶部;
int currentItemToBeFocused=(增量<(itemHeight/2))?1:0;
//将其他项目的z平移重置为0
对于(int i=0,last=(lastVisiblePosition-firstVisiblePosition);i