viewpagerindacator仿今日头条

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32673327/article/details/52921827

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

下载链接

猜你喜欢

转载自blog.csdn.net/qq_32673327/article/details/52921827