卡片式Viewpager

ViewPager的基本用法不必多說(shuō),這都很簡(jiǎn)單,我們可以在ViewPager中加載一個(gè)ImageView,也可以加載一個(gè)Fragment愧哟,這都是目前非常常見(jiàn)的用法。那么我今天說(shuō)的是ViewPager中的PageTransformer屬性哼蛆,用好這個(gè)屬性可以讓我們的應(yīng)用更加出彩蕊梧,OK,那我們就開(kāi)始吧腮介!

本文將從如下幾方面來(lái)介紹:

1.clipChildren屬性
2.一個(gè)頁(yè)面顯示多個(gè)ViewPager的Item
3.初識(shí)PagerTransformer
4.進(jìn)一步了解PagerTransformer
5.ViewPager結(jié)合CardView

1.clipChildren屬性

clipChildren屬性表示是否限制子控件在該容器所在的范圍內(nèi)肥矢,clipChildren屬性配合layout_gravity屬性,可以用來(lái)設(shè)置多余部分的顯示位置,我這里舉一個(gè)簡(jiǎn)單的例子甘改,比如喜馬拉雅FM這個(gè)應(yīng)用的首頁(yè):


image.png

大家注意看這個(gè)應(yīng)用底部導(dǎo)航欄中中間一個(gè)是要比另外四個(gè)高的旅东,這種效果很多人就會(huì)想到使用一個(gè)RelativeLayout布局來(lái)實(shí)現(xiàn),其實(shí)不用那么麻煩十艾,這種效果一個(gè)clipChildren屬性就能實(shí)現(xiàn)抵代,示例Demo如下:

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:clipChildren="false"  
    tools:context="org.lenve.clipchildren.MainActivity">  
    <LinearLayout  
        android:layout_width="match_parent"  
        android:layout_height="48dp"  
        android:layout_alignParentBottom="true"  
        android:background="#03b9fc"  
        android:orientation="horizontal">  
  
        <ImageView  
            android:layout_width="0dp"  
            android:layout_height="match_parent"  
            android:layout_weight="1"  
            android:src="@mipmap/ic_launcher"/>  
  
        <ImageView  
            android:layout_width="0dp"  
            android:layout_height="match_parent"  
            android:layout_weight="1"  
            android:src="@mipmap/ic_launcher"/>  
  
        <ImageView  
            android:layout_width="0dp"  
            android:layout_height="72dp"  
            android:layout_gravity="bottom"  
            android:layout_weight="1"  
            android:src="@mipmap/ic_launcher"/>  
  
        <ImageView  
            android:layout_width="0dp"  
            android:layout_height="match_parent"  
            android:layout_weight="1"  
            android:src="@mipmap/ic_launcher"/>  
  
        <ImageView  
            android:layout_width="0dp"  
            android:layout_height="match_parent"  
            android:layout_weight="1"  
            android:src="@mipmap/ic_launcher"/>  
    </LinearLayout>  
</RelativeLayout>  

大家看只需要在根節(jié)點(diǎn)添加clipChildren屬性,然后在第三個(gè)ImageView上添加layout_gravity屬性即可忘嫉,layout_gravity屬性值為bottom表示控件大小超出后控件底部對(duì)齊荤牍。效果如下:


image.png

OK,上面是對(duì)clipChildren屬性一個(gè)簡(jiǎn)單介紹庆冕,算是一個(gè)鋪墊康吵,接下來(lái)我們來(lái)看看ViewPager。

2.一個(gè)頁(yè)面顯示多個(gè)ViewPager的Item

我們要來(lái)解決的第一個(gè)問(wèn)題是如何在一個(gè)頁(yè)面上顯示ViewPager的多個(gè)item访递,一共有兩種解決方案晦嵌,第一種就是我們上文所說(shuō)的clipChildren屬性,第二種是clipToPadding屬性拷姿,我們先來(lái)看看使用第一種屬性設(shè)置的ViewPager:

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:clipChildren="false"  
    tools:context="org.lenve.myviewpagercards.MainActivity">  
  
    <android.support.v4.view.ViewPager  
        android:id="@+id/viewpager"  
        android:layout_width="match_parent"  
        android:layout_height="200dp"  
        android:layout_marginLeft="60dp"  
        android:layout_marginRight="60dp"  
        android:clipChildren="false"></android.support.v4.view.ViewPager>  
</RelativeLayout>  

只需要在父容器和ViewPager中都添加上clipChildren屬性惭载,然后給ViewPager設(shè)置左右兩個(gè)margin,使其不致于把整個(gè)屏幕占滿响巢,就是這么簡(jiǎn)單描滔,我們?cè)賮?lái)看看ViewPager的Adapter:

public class MyVpAdater extends PagerAdapter {  
    private List<Integer> list;  
    private Context context;  
  
    public MyVpAdater(Context context, List<Integer> list) {  
        this.context = context;  
        this.list = list;  
    }  
  
    @Override  
    public int getCount() {  
        return list.size();  
    }  
  
    @Override  
    public boolean isViewFromObject(View view, Object object) {  
        return view == object;  
    }  
  
    @Override  
    public Object instantiateItem(ViewGroup container, int position) {  
        ImageView iv = new ImageView(context);  
        iv.setImageResource(list.get(position));  
        container.addView(iv);  
        return iv;  
    }  
  
    @Override  
    public void destroyItem(ViewGroup container, int position, Object object) {  
        container.removeView((View) object);  
    }  
}  

最后再來(lái)看看Activity中的代碼:

ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);  
        viewPager.setPageMargin(80);  
        viewPager.setOffscreenPageLimit(3);  
        List<Integer> list = new ArrayList<>();  
        list.add(R.drawable.p001);  
        list.add(R.drawable.p002);  
        list.add(R.drawable.p003);  
        list.add(R.drawable.p004);  
        list.add(R.drawable.p005);  
        MyVpAdater adater = new MyVpAdater(this, list);  
        viewPager.setAdapter(adater);  

比我們一般使用ViewPager多了兩行代碼,一個(gè)是setOffscreenPageLimit抵乓,這個(gè)是設(shè)置預(yù)加載的頁(yè)數(shù)伴挚,我們知道默認(rèn)情況下這個(gè)參數(shù)為1靶衍,也就是左右各預(yù)加載一頁(yè)灾炭,但是我們這里要讓左右各預(yù)加載兩頁(yè),原因一會(huì)再說(shuō)颅眶,另外一個(gè)PageMargin就好說(shuō)了蜈出,就是設(shè)置ViewPager中兩頁(yè)之間的距離。OK涛酗,那我們來(lái)看看顯示效果:


image.png

OK铡原,就是這么簡(jiǎn)單,這樣商叹,我們現(xiàn)在已經(jīng)可以在一個(gè)頁(yè)面上來(lái)顯示多個(gè)ViewPager中的item燕刻,接下來(lái)我們先來(lái)看看PageTransformer的簡(jiǎn)單使用。

3.初識(shí)PagerTransformer

我們知道可以給ViewPager設(shè)置一個(gè)setPagerTransformer屬性剖笙,設(shè)置時(shí)候需要我們自己來(lái)實(shí)現(xiàn)PagerTransformer接口卵洗,實(shí)現(xiàn)這個(gè)接口的時(shí)候要實(shí)現(xiàn)該接口中的方法,transformPage弥咪,該方法接收兩個(gè)參數(shù)过蹂,其中一個(gè)是position十绑,如果你直接打印position出來(lái)可能會(huì)看得你云里霧里,實(shí)際上position表示的是第一個(gè)參數(shù)View的position酷勺,把這兩個(gè)參數(shù)一起打印出來(lái)就可以找到規(guī)律了:

比如從第1頁(yè)滑動(dòng)到第2頁(yè):

第一頁(yè)position的變化為 [0,-1]

第二頁(yè)position的變化為 [1,0]

知道了這個(gè)我們就可以寫(xiě)一個(gè)簡(jiǎn)單的切換動(dòng)畫(huà)了本橙,我希望頁(yè)面上正中間的item是正常的,兩邊的item都有一點(diǎn)透明度脆诉。那我們可以使用如下方式來(lái)定義:

public class AlphaTransformer implements ViewPager.PageTransformer {  
    private float MINALPHA = 0.5f;  
  
    /** 
     * position取值特點(diǎn): 
     * 假設(shè)頁(yè)面從0~1甚亭,則: 
     * 第一個(gè)頁(yè)面position變化為[0,-1] 
     * 第二個(gè)頁(yè)面position變化為[1,0] 
     * 
     * @param page 
     * @param position 
     */  
    @Override  
    public void transformPage(View page, float position) {  
        if (position < -1 || position > 1) {  
            page.setAlpha(MINALPHA);  
        } else {  
            //不透明->半透明  
            if (position < 0) {//[0,-1]  
                page.setAlpha(MINALPHA + (1 + position) * (1 - MINALPHA));  
            } else {//[1,0]  
                //半透明->不透明  
                page.setAlpha(MINALPHA + (1 - position) * (1 - MINALPHA));  
            }  
        }  
    }  
}  

定義好了之后再設(shè)置給ViewPager即可:

viewPager.setPageTransformer(false, new AlphaTransformer());  

我們?cè)賮?lái)看看運(yùn)行效果:


image.png

4.進(jìn)一步了解PagerTransformer

上面是一個(gè)簡(jiǎn)答的效果,遵循這個(gè)思路库说,我們可以做出更多的效果狂鞋,比如下面這個(gè)效果:

image.png

這是一個(gè)非常常見(jiàn)的效果,實(shí)現(xiàn)思路和前文一致潜的,就是讓ImageView動(dòng)態(tài)縮放骚揍。那我們來(lái)看看這里的PagerTransformer:

public class ScaleTransformer implements ViewPager.PageTransformer {  
    private static final float MIN_SCALE = 0.70f;  
    private static final float MIN_ALPHA = 0.5f;  
  
    @Override  
    public void transformPage(View page, float position) {  
        if (position < -1 || position > 1) {  
            page.setAlpha(MIN_ALPHA);  
            page.setScaleX(MIN_SCALE);  
            page.setScaleY(MIN_SCALE);  
        } else if (position <= 1) { // [-1,1]  
            float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));  
            if (position < 0) {  
                float scaleX = 1 + 0.3f * position;  
                Log.d("google_lenve_fb", "transformPage: scaleX:" + scaleX);  
                page.setScaleX(scaleX);  
                page.setScaleY(scaleX);  
            } else {  
                float scaleX = 1 - 0.3f * position;  
                page.setScaleX(scaleX);  
                page.setScaleY(scaleX);  
            }  
            page.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));  
        }  
    }  
}  

然后給ViewPager設(shè)置相應(yīng)的PagerTransformer:

viewPager.setPageTransformer(false, new ScaleTransformer());  

就是這么簡(jiǎn)單。其它復(fù)雜的旋轉(zhuǎn)平移等都是按照這個(gè)思路來(lái)實(shí)現(xiàn)啰挪,這里不再贅述信不。

5.ViewPager結(jié)合CardView

如果你還不會(huì)使用CardView,可以參考我之前的文章Android5.0之CardView的使用亡呵,那今天我們來(lái)看看ViewPager結(jié)合CardView會(huì)產(chǎn)生怎樣的效果呢抽活?

那么在這之前,我想先介紹一個(gè)屬性锰什,那就是clipToPadding下硕,這個(gè)屬性是什么意思呢?它表示是否允許ViewGroup在ViewGroup的padding中進(jìn)行繪制汁胆,默認(rèn)情況下該屬性的值為true梭姓,即不允許在ViewGroup的padding中進(jìn)行繪制。那如果我設(shè)置了false呢嫩码?我們來(lái)看看:

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context="org.lenve.myviewpagercards2.MainActivity">  
  
    <android.support.v4.view.ViewPager  
        android:id="@+id/viewpager"  
        android:layout_width="match_parent"  
        android:layout_height="200dp"  
        android:clipToPadding="false"  
        android:paddingBottom="24dp"  
        android:paddingLeft="48dp"  
        android:paddingRight="48dp"  
        android:paddingTop="24dp"></android.support.v4.view.ViewPager>  
</RelativeLayout>  

ViewPager的Adapter如下:

public class MyAdapter extends PagerAdapter {  
    private List<Integer> list;  
    private Context context;  
  
    public MyAdapter(Context context, List<Integer> list) {  
        this.context = context;  
        this.list = list;  
    }  
  
    @Override  
    public int getCount() {  
        return list.size();  
    }  
  
    @Override  
    public boolean isViewFromObject(View view, Object object) {  
        return view == object;  
    }  
  
    @Override  
    public Object instantiateItem(ViewGroup container, int position) {  
        ImageView iv = new ImageView(context);  
        iv.setImageResource(list.get(position));  
        container.addView(iv);  
        return iv;  
    }  
  
    @Override  
    public void destroyItem(ViewGroup container, int position, Object object) {  
        container.removeView((View) object);  
    }  
}  

Activity中的代碼:

ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);  
List<Integer> list = new ArrayList<>();  
list.add(R.drawable.p001);  
list.add(R.drawable.p002);  
list.add(R.drawable.p003);  
list.add(R.drawable.p004);  
list.add(R.drawable.p005);  
MyAdapter adapter = new MyAdapter(this, list);  
viewPager.setAdapter(adapter);  
viewPager.setPageMargin(20);  

顯示效果如下:


image.png

OK誉尖,那這個(gè)clipToPadding屬性是我們?cè)谝粋€(gè)頁(yè)面中顯示多個(gè)ViewPager item的第二種方式。這個(gè)CardView式的ViewPager我們就使用這種方式來(lái)實(shí)現(xiàn)铸题。先來(lái)看看效果圖:


image.png

整體思路和上文其實(shí)是一致的铡恕,我們來(lái)看看activity的布局:

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context="org.lenve.myviewpagercards2.MainActivity">  
  
    <android.support.v4.view.ViewPager  
        android:id="@+id/viewpager"  
        android:layout_width="match_parent"  
        android:layout_height="300dp"  
        android:clipToPadding="false"  
        android:paddingBottom="24dp"  
        android:paddingLeft="80dp"  
        android:paddingRight="80dp"  
        android:paddingTop="24dp"></android.support.v4.view.ViewPager>  
</RelativeLayout>  

ViewPager中每一個(gè)item的布局:

<?xml version="1.0" encoding="utf-8"?>  
<android.support.v7.widget.CardView android:id="@+id/cardview"  
                                    xmlns:android="http://schemas.android.com/apk/res/android"  
                                    xmlns:app="http://schemas.android.com/apk/res-auto"  
                                    android:layout_width="match_parent"  
                                    android:layout_height="wrap_content"  
                                    android:orientation="vertical"  
                                    app:cardCornerRadius="10dp">  
  
    <RelativeLayout  
        android:layout_width="match_parent"  
        android:layout_height="300dp">  
  
        <TextView  
            android:id="@+id/tv"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_centerInParent="true"  
            android:gravity="center"  
            android:text="我是一個(gè)TextView"/>  
  
        <Button  
            android:layout_width="96dp"  
            android:layout_height="36dp"  
            android:textColor="#ffffff"  
            android:layout_below="@id/tv"  
            android:layout_centerHorizontal="true"  
            android:layout_marginTop="12dp"  
            android:background="@color/colorAccent"  
            android:text="我是一個(gè)按鈕"/>  
    </RelativeLayout>  
</android.support.v7.widget.CardView>  

Adapter:

public class MyAdapter extends PagerAdapter {  
    private List<Integer> list;  
    private Context context;  
    private LayoutInflater inflater;  
  
    public MyAdapter(Context context, List<Integer> list) {  
        this.context = context;  
        this.list = list;  
        inflater = LayoutInflater.from(context);  
    }  
    @Override  
    public int getCount() {  
        return list.size();  
    }  
  
    @Override  
    public boolean isViewFromObject(View view, Object object) {  
        return view == object;  
    }  
  
    @Override  
    public Object instantiateItem(ViewGroup container, int position) {  
        View view = inflater.inflate(R.layout.vp_item, container, false);  
        container.addView(view);  
        return view;  
    }  
  
    @Override  
    public void destroyItem(ViewGroup container, int position, Object object) {  
        container.removeView((View) object);  
    }  
}  

Activity中的代碼:

ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);  
        List<Integer> list = new ArrayList<>();  
        list.add(R.drawable.p001);  
        list.add(R.drawable.p002);  
        list.add(R.drawable.p003);  
        list.add(R.drawable.p004);  
        list.add(R.drawable.p005);  
        MyAdapter adapter = new MyAdapter(this, list);  
        viewPager.setAdapter(adapter);  
        viewPager.setPageMargin((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,  
                48, getResources().getDisplayMetrics()));  
        viewPager.setPageTransformer(false, new ScaleTransformer(this));  

最后再來(lái)看看我們定義的PageTransformer:

public class ScaleTransformer implements ViewPager.PageTransformer {  
    private Context context;  
    private float elevation;  
  
    public ScaleTransformer(Context context) {  
        this.context = context;  
        elevation = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,  
                20, context.getResources().getDisplayMetrics());  
    }  
  
    @Override  
    public void transformPage(View page, float position) {  
        if (position < -1 || position > 1) {  
  
        } else {  
            if (position < 0) {  
                ((CardView) page).setCardElevation((1 + position) * elevation);  
            } else {  
                ((CardView) page).setCardElevation((1 - position) * elevation);  
            }  
        }  
    }  
}

原文鏈接
http://blog.csdn.net/u012702547/article/details/52334161

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丢间,隨后出現(xiàn)的幾起案子探熔,更是在濱河造成了極大的恐慌,老刑警劉巖烘挫,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诀艰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)涡驮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)暗甥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人捉捅,你說(shuō)我怎么就攤上這事撤防。” “怎么了棒口?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵寄月,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我无牵,道長(zhǎng)漾肮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任茎毁,我火速辦了婚禮克懊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘七蜘。我一直安慰自己谭溉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布橡卤。 她就那樣靜靜地躺著扮念,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碧库。 梳的紋絲不亂的頭發(fā)上柜与,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音嵌灰,去河邊找鬼弄匕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伞鲫,可吹牛的內(nèi)容都是我干的粘茄。 我是一名探鬼主播签舞,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼秕脓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了儒搭?” 一聲冷哼從身側(cè)響起吠架,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搂鲫,沒(méi)想到半個(gè)月后傍药,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年拐辽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拣挪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俱诸,死狀恐怖菠劝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睁搭,我是刑警寧澤赶诊,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站园骆,受9級(jí)特大地震影響舔痪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锌唾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一锄码、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晌涕,春花似錦巍耗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至驯耻,卻和暖如春亲族,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背可缚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工霎迫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帘靡。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓知给,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親描姚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涩赢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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