橫滑列表 中間項(xiàng)變大第一種效果

前言

這里只是一個(gè)小demo
先上效果圖吧

源碼如下:

public class MiddleHorizontalScrollView extends HorizontalScrollView {
    int current = -1; //當(dāng)前位于中間item的位置
    double halfScreenWidth; //屏幕寬度的一半
    LinearLayout linearLayout; //內(nèi)容布局
    int itemCount;//item的個(gè)數(shù)

    public MiddleHorizontalScrollView(Context context) {
        super(context, null);

    }

    public MiddleHorizontalScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        halfScreenWidth =1.0* getScreenWidth(context)/2;
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        //初始化時(shí)候確認(rèn)中間item放大
        if (getChildCount() > 0 && current == -1) {
            linearLayout = (LinearLayout) getChildAt(0);
            itemCount = linearLayout.getChildCount();
            for (int i = 0; i < itemCount - 1; i++) {
                if (linearLayout.getChildAt(i).getX() - l < halfScreenWidth && linearLayout.getChildAt(i + 1).getX() - l >= halfScreenWidth) {
                    TextView currentTxt = (TextView) linearLayout.getChildAt(i);
                    currentTxt.setTextSize(40);
                    currentTxt.setTextColor(Color.GREEN);
                    current = i;
                    break;
                }
            }
        }
    }


    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (current > 0 && linearLayout != null){
            TextView currentTxt = (TextView) linearLayout.getChildAt(current);
            //如果該item仍位于屏幕中間位置
            if (currentTxt.getX() - l < halfScreenWidth && linearLayout.getChildAt(current + 1).getX() - l >= halfScreenWidth) {
                currentTxt.setTextSize(40);
                currentTxt.setTextColor(Color.GREEN);
            }
            else {
                currentTxt.setTextSize(20);
                currentTxt.setTextColor(Color.RED);
                //尋找位于屏幕中間的item
                if (l > oldl) { //向右滑動
                    if (current < itemCount - 2)
                        for (int i = current + 1; i < itemCount - 1; i++) {
                            if (linearLayout.getChildAt(i).getX() - l < halfScreenWidth && linearLayout.getChildAt(i + 1).getX() - l >= halfScreenWidth) {
                                TextView txt = (TextView) linearLayout.getChildAt(i);
                                txt.setTextSize(40);
                                txt.setTextColor(Color.GREEN);
                                current = i;
                                break;
                            }
                        }
                }
                else {//向左滑動
                    if (current > 1)
                        for (int i = current - 1; i > 1; i--) {
                            if (linearLayout.getChildAt(i).getX() - l < halfScreenWidth && linearLayout.getChildAt(i + 1).getX() - l >= halfScreenWidth) {
                                TextView txt = (TextView) linearLayout.getChildAt(i);
                                txt.setTextSize(40);
                                txt.setTextColor(Color.GREEN);
                                current = i;
                                break;
                            }
                        }
                }
            }
        }
    }

    /**
     * 獲取屏幕寬度
     */
    public static int getScreenWidth(Context context) {
        Display display = ((WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        return display.getWidth();
    }

}
   <com.demo.viewdemo.MiddleHorizontalScrollView

        android:id="@+id/horizontalScrollView"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:scrollbars="none" >

        <LinearLayout

            android:id="@+id/content"

            android:layout_width="fill_parent"

            android:layout_height="200dp"

            android:layout_centerVertical="true"

            android:orientation="horizontal"

            />

    </com.demo.viewdemo.MiddleHorizontalScrollView>
       contentLinear= (LinearLayout) findViewById(R.id.content);
        horizontalScrollView= (MiddleHorizontalScrollView) findViewById(R.id.horizontalScrollView);
        contentLinear.removeAllViews();
        for (int i = 0; i < 50; i++) {
            TextView child = new TextView(this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(80, ViewGroup.LayoutParams.MATCH_PARENT);
            params.gravity=Gravity.CENTER;
            child.setTextSize(20);
            child.setTextColor(Color.RED);
            child.setGravity(Gravity.CENTER);
            child.setText(""+i);
            contentLinear.addView(child,params);
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欲间,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烘绽,更是在濱河造成了極大的恐慌颈渊,老刑警劉巖遂黍,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異俊嗽,居然都是意外死亡雾家,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門绍豁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芯咧,“玉大人,你說我怎么就攤上這事竹揍【挫” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵芬位,是天一觀的道長无拗。 經(jīng)常有香客問我,道長昧碉,這世上最難降的妖魔是什么英染? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任阴孟,我火速辦了婚禮,結(jié)果婚禮上税迷,老公的妹妹穿的比我還像新娘永丝。我一直安慰自己,他們只是感情好箭养,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布慕嚷。 她就那樣靜靜地躺著,像睡著了一般毕泌。 火紅的嫁衣襯著肌膚如雪喝检。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天撼泛,我揣著相機(jī)與錄音挠说,去河邊找鬼。 笑死愿题,一個(gè)胖子當(dāng)著我的面吹牛损俭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播潘酗,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼杆兵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仔夺?” 一聲冷哼從身側(cè)響起琐脏,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缸兔,沒想到半個(gè)月后日裙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惰蜜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年昂拂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝎抽。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡政钟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出樟结,到底是詐尸還是另有隱情景描,我是刑警寧澤蚕愤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響绑莺,放射性物質(zhì)發(fā)生泄漏累驮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望廉嚼。 院中可真熱鬧,春花似錦倒戏、人聲如沸怠噪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傍念。三九已至,卻和暖如春葛闷,著一層夾襖步出監(jiān)牢的瞬間憋槐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工淑趾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阳仔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓扣泊,卻偏偏與公主長得像近范,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子旷赖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,849評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫顺又、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 在一個(gè)慵懶的清晨等孵,我開始了難忘的迪拜之行的第二天。醒來后蹂空,洗漱完畢俯萌,我繼續(xù)去健身房鍛煉。你也許會問:為什么不...
    點(diǎn)石陳金閱讀 423評論 0 4
  • 決明子減肥茶一 材料:荷葉3g上枕,決明子6g咐熙,制大黃3g,首烏3g辨萍,扁豆3g棋恼,玳玳花3g。 做法:以上藥材沖洗干凈锈玉,...
    不思涼閱讀 538評論 0 1
  • 那些我們沒談過的事 《那些我們沒談過的事》是馬克.李維寫的爪飘,第一次看他的書還是兩年半前,那時(shí)我高三拉背。記得當(dāng)時(shí)是熬夜...
    溪暮閱讀 959評論 5 1