Android使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果

最近闲来无事,在网上寻找源代码看,突然发现了一个国内技术牛人开发的快速开发框架Andbase,花了一天时间研究了下源码和怎么使用,现将开发常见的侧滑栏和滑动标签页组合效果的使用介绍个大家,希望可以减少大家的开发难度

老样子,先上效果图

\

\

ok,下面开始介绍如何使用andbase快速开发框架,实现这种常见的界面效果

工程包结构

\

利用andbase框架开发的一个应用叫做“Android开发宝”,里面的源码详细的介绍了各种效果的使用,功能十分强大,有兴趣的最好可以研究下源码,收获颇丰,由于代码注释很多,我就直接贴代码了

SlidingMenuNestTabActivity.java

 

 

01. package com.example.andbaseexample;
02.  
03. import android.os.Bundle;
04. import android.view.View;
05. import android.view.View.OnClickListener;
06.  
07. import com.ab.activity.AbActivity;
08. import com.ab.view.slidingmenu.SlidingMenu;
09. import com.ab.view.titlebar.AbTitleBar;
10.  
11. /**
12. * 碎片的容器,主Activity
13. *
14. * @author ZhaoKaiQiang
15. *
16. *         Time:2014年3月3日
17. */
18. public class SlidingMenuNestTabActivity extends AbActivity {
19.  
20. private SlidingMenu menu;
21.  
22. @Override
23. public void onCreate(Bundle savedInstanceState) {
24. super.onCreate(savedInstanceState);
25. setAbContentView(R.layout.sliding_menu_content);
26.  
27. AbTitleBar mAbTitleBar = this.getTitleBar();
28. mAbTitleBar.setTitleText("侧滑栏");
29. mAbTitleBar.setLogo(R.drawable.button_selector_back);
30. mAbTitleBar.setTitleBarBackground(R.drawable.top_bg);
31. mAbTitleBar.setTitleTextMargin(10000);
32. mAbTitleBar.setLogoLine(R.drawable.line);
33. mAbTitleBar.getLogoView().setBackgroundResource(
34. R.drawable.button_selector_menu);
35.  
36. // 主视图的Fragment添加
37. getSupportFragmentManager().beginTransaction()
38. .replace(R.id.content_frame, new SlidingTabFragment()).commit();
39.  
40. // SlidingMenu的配置
41. menu = new SlidingMenu(this);
42. menu.setMode(SlidingMenu.LEFT);
43.  
44. // slidingmenu的事件模式,如果里面有可以滑动的请用TOUCHMODE_MARGIN
45. // 可解决事件冲突问题
46. menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
47.  
48. menu.setShadowWidthRes(R.dimen.shadow_width);
49. menu.setShadowDrawable(R.drawable.shadow);
50. menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
51. menu.setFadeDegree(0.35f);
52. menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
53.  
54. // menu视图的Fragment添加
55. menu.setMenu(R.layout.sliding_menu_menu);
56. getSupportFragmentManager().beginTransaction()
57. .replace(R.id.menu_frame, new Fragment1()).commit();
58.  
59. mAbTitleBar.getLogoView().setOnClickListener(new OnClickListener() {
60.  
61. @Override
62. public void onClick(View arg0) {
63. if (menu.isMenuShowing()) {
64. menu.showContent();
65. else {
66. menu.showMenu();
67. }
68. }
69. });
70. }
71.  
72. @Override
73. public void onBackPressed() {
74. if (menu.isMenuShowing()) {
75. menu.showContent();
76. else {
77. super.onBackPressed();
78. }
79. }
80.  
81. }


 

SlidingTabFragment.java

 

01. package com.example.andbaseexample;
02.  
03. import java.util.ArrayList;
04. import java.util.List;
05.  
06. import android.graphics.Color;
07. import android.os.Bundle;
08. import android.support.v4.app.Fragment;
09. import android.view.LayoutInflater;
10. import android.view.View;
11. import android.view.ViewGroup;
12.  
13. import com.ab.view.sliding.AbSlidingTabView;
14. /**
15. *  活动标签碎片
16. * @author  ZhaoKaiQiang
17. *         
18. *          Time:2014年3月3日
19. */
20. public class SlidingTabFragment extends Fragment {
21.  
22. public View onCreateView(LayoutInflater inflater, ViewGroup container,
23. Bundle savedInstanceState) {
24. View view = inflater.inflate(R.layout.sliding_tab, null);
25. AbSlidingTabView mAbSlidingTabView = (AbSlidingTabView) view
26. .findViewById(R.id.mAbSlidingTabView);
27.  
28. // 如果里面的页面列表不能下载原因:
29. // Fragment里面用的AbTaskQueue,由于有多个tab,顺序下载有延迟,还没下载好就被缓存了。改成用AbTaskPool,就ok了。
30. // 或者setOffscreenPageLimit(0)
31.  
32. // 缓存数量
33. mAbSlidingTabView.getViewPager().setOffscreenPageLimit(5);
34.  
35. Fragment1 page1 = new Fragment1();
36. Fragment1 page2 = new Fragment1();
37. Fragment1 page3 = new Fragment1();
38. Fragment1 page4 = new Fragment1();
39. Fragment1 page5 = new Fragment1();
40.  
41. List<Fragment> mFragments = new ArrayList<Fragment>();
42. mFragments.add(page1);
43. mFragments.add(page2);
44. mFragments.add(page3);
45. mFragments.add(page4);
46. mFragments.add(page5);
47.  
48. List<String> tabTexts = new ArrayList<String>();
49. tabTexts.add("推荐");
50. tabTexts.add("排行");
51. tabTexts.add("游戏中心");
52. tabTexts.add("专题栏目");
53. tabTexts.add("咖啡屋");
54. // 设置样式
55. mAbSlidingTabView.setTabTextColor(Color.BLACK);
56. mAbSlidingTabView.setTabSelectColor(Color.rgb(30168131));
57. mAbSlidingTabView.setTabBackgroundResource(R.drawable.tab_bg);
58. mAbSlidingTabView.setTabLayoutBackgroundResource(R.drawable.slide_top);
59. // 演示增加一组
60. mAbSlidingTabView.addItemViews(tabTexts, mFragments);
61.  
62. // 演示增加一个
63. // mAbSlidingTabView.addItemView("咖啡屋", page5);
64.  
65. mAbSlidingTabView.setTabPadding(208208);
66. return view;
67. }
68.  
69. public void onActivityCreated(Bundle savedInstanceState) {
70. super.onActivityCreated(savedInstanceState);
71. }
72.  
73. }

ImageListAdapter.java

 

 

001. package com.example.andbaseexample;
002.  
003. import java.util.List;
004. import java.util.Map;
005.  
006. import android.content.Context;
007. import android.view.LayoutInflater;
008. import android.view.View;
009. import android.view.ViewGroup;
010. import android.widget.BaseAdapter;
011. import android.widget.ImageButton;
012. import android.widget.ImageView;
013. import android.widget.TextView;
014.  
015. import com.ab.bitmap.AbImageDownloader;
016. import com.ab.global.AbConstant;
017. /**
018. * 碎片中的图片列表适配器
019. * @author  ZhaoKaiQiang
020. *         
021. *          Time:2014年3月3日
022. */
023. public class ImageListAdapter extends BaseAdapter{
024.  
025.  
026. private Context mContext;
027. //xml转View对象
028. private LayoutInflater mInflater;
029. //单行的布局
030. private int mResource;
031. //列表展现的数据
032. private List mData;
033. //Map中的key
034. private String[] mFrom;
035. //view的id
036. private int[] mTo;
037. //图片下载器
038. private AbImageDownloader mAbImageDownloader = null;
039.  
040. /**
041. * 构造方法
042. * @param context
043. * @param data 列表展现的数据
044. * @param resource 单行的布局
045. * @param from Map中的key
046. * @param to view的id
047. */
048. public ImageListAdapter(Context context, List data,
049. int resource, String[] from, int[] to){
050. this.mContext = context;
051. this.mData = data;
052. this.mResource = resource;
053. this.mFrom = from;
054. this.mTo = to;
055. //用于将xml转为View
056. this.mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
057. //图片下载器
058. mAbImageDownloader = new AbImageDownloader(mContext);
059. mAbImageDownloader.setWidth(100);
060. mAbImageDownloader.setHeight(100);
061. mAbImageDownloader.setType(AbConstant.SCALEIMG);
062. mAbImageDownloader.setLoadingImage(R.drawable.image_loading);
063. mAbImageDownloader.setErrorImage(R.drawable.image_error);
064. mAbImageDownloader.setNoImage(R.drawable.image_no);
065. //mAbImageDownloader.setAnimation(true);
066. }  
067.  
068. @Override
069. public int getCount() {
070. return mData.size();
071. }
072.  
073. @Override
074. public Object getItem(int position) {
075. return mData.get(position);
076. }
077.  
078. @Override
079. public long getItemId(int position){
080. return position;
081. }
082.  
083. @Override
084. public View getView(int position, View convertView, ViewGroup parent){
085. final ViewHolder holder;
086. if(convertView == null){
087. //使用自定义的list_items作为Layout
088. convertView = mInflater.inflate(mResource, parent, false);
089. //减少findView的次数
090. holder = new ViewHolder();
091. //初始化布局中的元素
092. holder.itemsIcon = ((ImageView) convertView.findViewById(mTo[0])) ;
093. holder.itemsTitle = ((TextView) convertView.findViewById(mTo[1]));
094. holder.itemsText = ((TextView) convertView.findViewById(mTo[2]));
095. convertView.setTag(holder);
096. }else{
097. holder = (ViewHolder) convertView.getTag();
098. }
099.  
100. //获取该行的数据
101. final Map<String, Object>  obj = (Map<String, Object>)mData.get(position);
102. String imageUrl = (String)obj.get("itemsIcon");
103. holder.itemsTitle.setText((String)obj.get("itemsTitle"));
104. holder.itemsText.setText((String)obj.get("itemsText"));
105. //设置加载中的View
106. mAbImageDownloader.setLoadingView(convertView.findViewById(R.id.progressBar));
107. //图片的下载
108. mAbImageDownloader.display(holder.itemsIcon,imageUrl);
109.  
110. return convertView;
111. }
112.  
113. /**
114. * View元素
115. */
116. static class ViewHolder {
117. ImageView itemsIcon;
118. TextView itemsTitle;
119. TextView itemsText;
120. ImageButton itemsBtn;
121. }
122.  
123. }


 

Fragment1.java

 

001. package com.example.andbaseexample;
002.  
003. import java.util.ArrayList;
004. import java.util.HashMap;
005. import java.util.List;
006. import java.util.Map;
007. import java.util.Random;
008.  
009. import android.app.Activity;
010. import android.os.Bundle;
011. import android.support.v4.app.Fragment;
012. import android.view.LayoutInflater;
013. import android.view.View;
014. import android.view.ViewGroup;
015. import android.widget.AdapterView;
016. import android.widget.AdapterView.OnItemClickListener;
017.  
018. import com.ab.task.AbTaskItem;
019. import com.ab.task.AbTaskListener;
020. import com.ab.task.AbTaskQueue;
021. import com.ab.view.listener.AbOnListViewListener;
022. import com.ab.view.pullview.AbPullListView;
023.  
024. /**
025. * Activity中嵌入的碎片
026. * @author  ZhaoKaiQiang
027. *         
028. *          Time:2014年3月3日
029. */
030. public class Fragment1 extends Fragment {
031.  
032. private Activity mActivity = null;
033. private List<Map<String, Object>> list = null;
034. private List<Map<String, Object>> newList = null;
035. private AbPullListView mAbPullListView = null;
036. private int currentPage = 1;
037. private AbTaskQueue mAbTaskQueue = null;
038. private ArrayList<String> mPhotoList = new ArrayList<String>();
039. private ImageListAdapter myListViewAdapter = null;
040. private int total = 50;
041. private int pageSize = 5;
042.  
043. public View onCreateView(LayoutInflater inflater, ViewGroup container,
044. Bundle savedInstanceState) {
045. mActivity = this.getActivity();
046.  
047. View view = inflater.inflate(R.layout.pull_list, null);
048. mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i3/13215035600700175/T1C2mzXthaXXXXXXXX_!!0-item_pic.jpg_230x230.jpg"); 
049. mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i2/13215025617307680/T1AQqAXqpeXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
050. mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i1/13215035569460099/T16GuzXs0cXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
051. mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i2/13215023694438773/T1lImmXElhXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
052. mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i3/13215023521330093/T1BWuzXrhcXXXXXXXX_!!0-item_pic.jpg_230x230.jpg"); 
053. mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i4/13215035563144015/T1Q.eyXsldXXXXXXXX_!!0-item_pic.jpg_230x230.jpg"); 
054. mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i3/13215023749568975/T1UKWCXvpXXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
055. mAbTaskQueue = AbTaskQueue.getInstance();
056. //获取ListView对象
057. mAbPullListView = (AbPullListView)view.findViewById(R.id.mListView);
058. //设置进度条的样式
059. mAbPullListView.getHeaderView().setHeaderProgressBarDrawable(this.getResources().getDrawable(R.drawable.progress_circular));
060. mAbPullListView.getFooterView().setFooterProgressBarDrawable(this.getResources().getDrawable(R.drawable.progress_circular));
061. //ListView数据
062. list = new ArrayList<Map<String, Object>>();
063.  
064. //使用自定义的Adapter
065. myListViewAdapter = new ImageListAdapter(mActivity, list,R.layout.list_items,
066. new String[] { "itemsIcon""itemsTitle","itemsText" }, new int[] { R.id.itemsIcon,
067. R.id.itemsTitle,R.id.itemsText });
068. mAbPullListView.setAdapter(myListViewAdapter);
069. //item被点击事件
070. mAbPullListView.setOnItemClickListener(new OnItemClickListener(){
071. @Override
072. public void onItemClick(AdapterView<?> parent, View view,
073. int position, long id) {
074. }
075. });
076.  
077. return view;
078. }
079.  
080.  
081.  
082. @Override
083. public void onStart() {
084. super.onStart();
085. //定义两种查询的事件
086. final AbTaskItem item1 = new AbTaskItem();
087. item1.listener = new AbTaskListener() {
088.  
089. @Override
090. public void update() {
091. list.clear();
092. if(newList!=null && newList.size()>0){
093. list.addAll(newList);
094. myListViewAdapter.notifyDataSetChanged();
095. newList.clear();
096. }
097. mAbPullListView.stopRefresh();
098. }
099.  
100. @Override
101. public void get() {
102. try {
103. Thread.sleep(1000);
104. currentPage = 1;
105. newList = new ArrayList<Map<String, Object>>();
106. Map<String, Object> map = null;
107.  
108. for (int i = 0; i < pageSize; i++) {
109. map = new HashMap<String, Object>();
110. map.put("itemsIcon",mPhotoList.get(new Random().nextInt(mPhotoList.size())));
111. map.put("itemsTitle""[Fragment1]"+(i+1));
112. map.put("itemsText""[Fragment1]..."+(i+1));
113. newList.add(map);
114. }
115. catch (Exception e) {
116. }
117. };
118. };
119.  
120. final AbTaskItem item2 = new AbTaskItem();
121. item2.listener = new AbTaskListener() {
122.  
123. @Override
124. public void update() {
125. if(newList!=null && newList.size()>0){
126. list.addAll(newList);
127. myListViewAdapter.notifyDataSetChanged();
128. newList.clear();
129. }
130. mAbPullListView.stopLoadMore();
131. }
132.  
133. @Override
134. public void get() {
135. try {
136. currentPage++;
137. Thread.sleep(1000);
138. newList = new ArrayList<Map<String, Object>>();
139. Map<String, Object> map = null;
140.  
141. for (int i = 0; i < pageSize; i++) {
142. map = new HashMap<String, Object>();
143. map.put("itemsIcon",mPhotoList.get(new Random().nextInt(mPhotoList.size())));
144. map.put("itemsTitle""item上拉"+((currentPage-1)*pageSize+(i+1)));
145. map.put("itemsText""item上拉..."+((currentPage-1)*pageSize+(i+1)));
146. if((list.size()+newList.size()) < total){
147. newList.add(map);
148. }
149. }
150. catch (Exception e) {
151. currentPage--;
152. newList.clear();
153. }
154. };
155. };
156.  
157. mAbPullListView.setAbOnListViewListener(new AbOnListViewListener(){
158.  
159. @Override
160. public void onRefresh() {
161. mAbTaskQueue.execute(item1);
162. }
163.  
164. @Override
165. public void onLoadMore() {
166. mAbTaskQueue.execute(item2);
167. }
168.  
169. });
170.  
171. //第一次下载数据
172. mAbTaskQueue.execute(item1);
173. }
174.  
175.  
176.  
177. public void onActivityCreated(Bundle savedInstanceState) {
178. super.onActivityCreated(savedInstanceState);
179. }
180.  
181. }

最后给出源代码地址,有问题请留言

 

下载源代码 http://yun.baidu.com/share/link?shareid=1655676811&uk=2805318064

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值