第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

百行代碼實(shí)現(xiàn)Android WheelView

標(biāo)簽:
Android

先说下实现思路,这里,我打算使用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效果

點(diǎn)擊查看更多內(nèi)容
11人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開(kāi)發(fā)工程師
手記
粉絲
8547
獲贊與收藏
6550

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消