android wheelview 字体颜色,百行代码实现Android WheelView

先说下实现思路,这里,我打算使用ListView来实现。

第一步:无限滑动,这个比较简单,类似于Banner图的无限滑动原理,在Adapter中处理一下count即可,代码如下

// 为Count设置一个较大的值

@Override

public int getCount() {

return Integer.MAX_VALUE;

}

// 在getView中,在根据position取值的时候,根据数据源的大小进行取余操作

int newpos = position;

if (position >= listDatas.size()) {

newpos = position % listDatas.size();

}

通过以上两步操作,就简单实现的ListView的无限滑动

第二步:获取焦点Item

第二部稍微麻烦一点,我们需要定位ListView中间的Item,并改变中间这个Item的样式,使它和其他的Item有所区别,这里我们首先为ListView添加一个OnScrollListener,实现onScroll方法,先看下方法体

public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount)

firstVisibleItem:listView中第一个显示的View的位置

visibleItemCount:listView中可见的Item的个数

totalItemCount:listVIew中Item的总个数

我们可以直接使用 firstVisibleItem+visibleItemCount/2 即可获得中间Item的Position,这就让问题变的简单了,我只需要把获取到的中间Position传递到Adapter,然后重绘一次即可,最后再添加一个回调接口把Item的Content传递到外部即可。

@Override

public void onScroll(AbsListView view, int firstVisibleItem,

int visibleItemCount, int totalItemCount) {

mMiddlePosition = firstVisibleItem + visibleItemCount / 2;

// lastPosition 为了防止同一重复回调

if (mAdapter != null && mMiddlePosition != lastPosition) {

mAdapter.setMiddlePos(mMiddlePosition);

mAdapter.notifyDataSetChanged();

listener.onItemSelect(mAdapter.getItem(mMiddlePosition));

}

lastPosition = mMiddlePosition;

}

每当我们Item位置发生改变,重新获取到新的中间Item的Position的位置,把这个值传递给Adapter,然后调用一下notifyDataSetChanged重绘即可。

adapter中代码

@Override

public View getView(int position, View convertView, ViewGroup parent) {

TextView tv = new TextView(mContext);

tv.setPadding(0, 10, 0, 10);

int newpos = position;

if (position >= listDatas.size()) {

newpos = position % listDatas.size();

}

if (newpos == (mMiddlePosition) % listDatas.size()) {

tv.setTextColor(Color.RED);

}

tv.setText(listDatas.get(newpos));

tv.setGravity(Gravity.CENTER);

return tv;

}

整个流程核心代码不足百行,我们就简单实现了一个简单的WheelView,连动起来实现也很简单,这里就不再赘述,如果有小伙伴需要,请在下方留言。大家也可以根据UI效果图,自己添加相应的UI效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值