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
下載連結