1. 程式人生 > >viewpagerindacator仿今日頭條

viewpagerindacator仿今日頭條

api的話建議獨自申請一個,我申請的是聚合資料的新聞的介面,免費的但是隻能用兩個月

1.       首先準備csdn-XListView,viewpagerindacator(只需要其中的library)的類庫,Gson.jar,xUtils.jar

2.       選中新建的工程,單擊右鍵Properties->android->add選中我們需要新增的兩個類庫,另外把所需要的jar包放在libs目錄下

3.      Viewpagerindacator中要想達到我們想要的效果,就需要在res->values->style中新增一個style樣式

3.1

<stylename="CustomTabPageIndicator"parent="Widget.TabPageIndicator">

        <itemname="android:background">@drawable/tab_indicator</item>

        <itemname="android:textAppearance">@style/CustomTabPageIndicator.Text</item>

        <itemname="android:textSize">14sp</item>

        <itemname="android:dividerPadding">8dp</item>

        <itemname="android:showDividers">middle</item>

        <item name="android:paddingLeft">10dp</item>

        <itemname="android:paddingRight">10dp</item>

        <itemname="android:fadingEdge">horizontal</item>

        <itemname="android:fadingEdgeLength">8dp</item>

    </style>

 

    <stylename="CustomTabPageIndicator.Text"parent="android:TextAppearance.Medium">

        <itemname="android:typeface">monospace</item>

        <itemname="android:textColor">@drawable/selector_tabtext</item>

</style>

3.2   res下新建drawable資料夾新建兩個xml檔案

selector_tabtext.xml(設定文字的顏色)

<?xmlversion="1.0" encoding="utf-8"?>

<selectorxmlns:android="http://schemas.android.com/apk/res/android">

 

    <itemandroid:state_selected="true" android:color="#f00505"/>

    <itemandroid:state_pressed="true" android:color="#f00505"/>

    <item android:state_focused="true"android:color="#f00505"/>

    <itemandroid:color="@android:color/black"/>

 

</selector>

tab_indicator.xml(設定文字的背景)

<?xmlversion="1.0" encoding="utf-8"?>

<selectorxmlns:android="http://schemas.android.com/apk/res/android">

 

    <item android:drawable="@android:color/transparent"android:state_pressed="false"android:state_selected="false"/>

    <itemandroid:drawable="@android:color/transparent"android:state_pressed="true"android:state_selected="false"/>

    <item android:drawable="@drawable/base_tabpager_indicator_selected"android:state_pressed="false"android:state_selected="true"/>

    <itemandroid:drawable="@drawable/base_tabpager_indicator_selected"android:state_pressed="true"android:state_selected="true"/>

 

</selector>

3.3然後再將我們配置style樣式應用到我們需要的activity中,在AndroidManifest.xml配置,如下

<?xmlversion="1.0" encoding="utf-8"?>

<manifestxmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.topnewsdemo"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="14"

        android:targetSdkVersion="20"/>

 

    <uses-permissionandroid:name="android.permission.INTERNET" />

    <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

    <application

        android:allowBackup="true"

       android:icon="@drawable/ic_launcher"

       android:label="@string/app_name"

        android:theme="@style/StyledIndicators">

        <activity

           android:name="com.topnews.activity.JokerActivity"

           android:label="@string/app_name" >

            <intent-filter>

                <actionandroid:name="android.intent.action.MAIN" />

 

                <categoryandroid:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <activity

           android:name="com.topnews.activity.WebviewActivity"

           android:theme="@android:style/Theme.Light.NoTitleBar" />

    </application>

 

</manifest>

3.4其中有一張圖片,會因缺少報錯,這是文字的背景圖片,我會上傳到群裡去,

4.Viewpagerindacator的具體使用

佈局:

<com.viewpagerindicator.TabPageIndicator

       android:id="@+id/indicator"

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

       android:background="@drawable/base_action_bar_bg" >

    </com.viewpagerindicator.TabPageIndicator>

 

   <android.support.v4.view.ViewPager

       android:id="@+id/pager"

       android:layout_width="match_parent"

       android:layout_height="0dp"

       android:layout_weight="1" >

</android.support.v4.view.ViewPager>

Activity中使用

// 例項化ViewPager,然後給ViewPager設定Adapter

                   ViewPager pager = (ViewPager)findViewById(R.id.pager);

                   FragmentPagerAdapter adapter= new TabPageIndicatorAdapter(

                                     getSupportFragmentManager());

                   pager.setAdapter(adapter);

 

                   // 例項化TabPageIndicator,然後與ViewPager綁在一起(核心步驟)

                   TabPageIndicator indicator =(TabPageIndicator) findViewById(R.id.indicator);

                   indicator.setViewPager(pager);

4.1給Viewpagerindacator設定介面卡

 

public classTabPageIndicatorAdapter extends FragmentPagerAdapter {

         publicTabPageIndicatorAdapter(FragmentManager fm) {

                   super(fm);

         }

 

         @Override

         public Fragment getItem(int position) {

                   // 新建一個Fragment來展示ViewPageritem的內容,並傳遞引數

 

                   Fragment fragment = newNewsFragment();

                   Bundle args = new Bundle();

                   args.putString("arg",Constants.TITLE[position]);

                   fragment.setArguments(args);

 

                   return fragment;

 

         }

 

         @Override

         public CharSequence getPageTitle(intposition) {

                   returnConstants.TITLE[position % Constants.TITLE.length];

         }

 

         @Override

         public int getCount() {

                   returnConstants.TITLE.length;

         }

 

}

這裡的話必須要繼承FragmentPagerAdapter,不然會報錯,

4.       xListview的使用

<me.maxwin.view.XListView

        android:id="@+id/lv_joker"

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

        android:layout_marginTop="2dp"/>

 

    <View

       android:layout_width="match_parent"

        android:layout_height="5dp"

       android:background="#cccccc" />

 

implements     IXListViewRefreshListener,IXListViewLoadMore

這裡需要要實現這兩個介面就可以,一個上拉載入更多,一個下拉重新整理

5.       xUtils的使用

         public void getBitmap(ImageViewimageView, String url) {

                   bitmapUtils =BitmapHelp.getBitmapUtils(context);

 // 建立BitmapUtils物件,通過xUtils框架獲取

                   bitmapUtils.configDefaultLoadingImage(R.drawable.ic_launcher);

// 設定預設圖片

                   bitmapUtils.configDefaultLoadFailedImage(R.drawable.empty_photo);

// 設定載入失敗的預設圖片

                   bitmapUtils.display(imageView,url);

// 載入圖片 引數:1.ImageView 2.url

         }

6.       Gson的使用

 

 

public static List<Result>getListFromJson(String strJson) {

 

       List<Result> list =new ArrayList<Result>();;

       try {

           System.out.println("DAL傳輸strjson"+strJson);

           Gson gson = new Gson();

           JsonParser parser = new JsonParser();//初始化json解析器

           JsonObject jsonObject = parser.parse(strJson).getAsJsonObject();//json物件

           String reason = jsonObject.get("reason").getAsString();//這裡的reason是說只要解析到這個就開始進入下面的if

           System.out.println("aaaa"+reason);

           if (reason!=null) {

                System.out.println("DAL--執行GSON");

                jsonObject =jsonObject.getAsJsonObject("result");

                JsonArray jsonArray =jsonObject.getAsJsonArray("data");//這裡的data就是陣列中的資料,也就是我們需要的資料,可以對比網上的api進行比對

                for (int i = 0; i <jsonArray.size(); i++) {

                    System.out.println("DAL--執行GSON2");

                    JsonElement el =jsonArray.get(i); // 獲取第i個數組元素

                    Result obj =gson.fromJson(el, Result.class); // 對映為類例項

                    list.add(obj);

                }//end for

               

           }//end if

       } catch (Exception e) {

           e.printStackTrace();

       }

 

       return list;

}

這裡的strjson就是你從網路上獲取到的json資料,

其中的Result就是我們寫的物件類,也就是model

下載連結