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

时间:2023-03-09 00:47:27
【Android进阶】使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果

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

老样子,先上效果图

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

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

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

工程包结构

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

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

SlidingMenuNestTabActivity.java


package com.example.andbaseexample;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener; import com.ab.activity.AbActivity;
import com.ab.view.slidingmenu.SlidingMenu;
import com.ab.view.titlebar.AbTitleBar; /**
* 碎片的容器,主Activity
*
* @author ZhaoKaiQiang
*
* Time:2014年3月3日
*/
public class SlidingMenuNestTabActivity extends AbActivity { private SlidingMenu menu; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setAbContentView(R.layout.sliding_menu_content); AbTitleBar mAbTitleBar = this.getTitleBar();
mAbTitleBar.setTitleText("侧滑栏");
mAbTitleBar.setLogo(R.drawable.button_selector_back);
mAbTitleBar.setTitleBarBackground(R.drawable.top_bg);
mAbTitleBar.setTitleTextMargin(10, 0, 0, 0);
mAbTitleBar.setLogoLine(R.drawable.line);
mAbTitleBar.getLogoView().setBackgroundResource(
R.drawable.button_selector_menu); // 主视图的Fragment添加
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, new SlidingTabFragment()).commit(); // SlidingMenu的配置
menu = new SlidingMenu(this);
menu.setMode(SlidingMenu.LEFT); // slidingmenu的事件模式,如果里面有可以滑动的请用TOUCHMODE_MARGIN
// 可解决事件冲突问题
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); menu.setShadowWidthRes(R.dimen.shadow_width);
menu.setShadowDrawable(R.drawable.shadow);
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
menu.setFadeDegree(0.35f);
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); // menu视图的Fragment添加
menu.setMenu(R.layout.sliding_menu_menu);
getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_frame, new Fragment1()).commit(); mAbTitleBar.getLogoView().setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
if (menu.isMenuShowing()) {
menu.showContent();
} else {
menu.showMenu();
}
}
});
} @Override
public void onBackPressed() {
if (menu.isMenuShowing()) {
menu.showContent();
} else {
super.onBackPressed();
}
} }

SlidingTabFragment.java

package com.example.andbaseexample;

import java.util.ArrayList;
import java.util.List; import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import com.ab.view.sliding.AbSlidingTabView;
/**
* 活动标签碎片
* @author ZhaoKaiQiang
*
* Time:2014年3月3日
*/
public class SlidingTabFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.sliding_tab, null);
AbSlidingTabView mAbSlidingTabView = (AbSlidingTabView) view
.findViewById(R.id.mAbSlidingTabView); // 如果里面的页面列表不能下载原因:
// Fragment里面用的AbTaskQueue,由于有多个tab,顺序下载有延迟,还没下载好就被缓存了。改成用AbTaskPool,就ok了。
// 或者setOffscreenPageLimit(0) // 缓存数量
mAbSlidingTabView.getViewPager().setOffscreenPageLimit(5); Fragment1 page1 = new Fragment1();
Fragment1 page2 = new Fragment1();
Fragment1 page3 = new Fragment1();
Fragment1 page4 = new Fragment1();
Fragment1 page5 = new Fragment1(); List<Fragment> mFragments = new ArrayList<Fragment>();
mFragments.add(page1);
mFragments.add(page2);
mFragments.add(page3);
mFragments.add(page4);
mFragments.add(page5); List<String> tabTexts = new ArrayList<String>();
tabTexts.add("推荐");
tabTexts.add("排行");
tabTexts.add("游戏中心");
tabTexts.add("专题栏目");
tabTexts.add("咖啡屋");
// 设置样式
mAbSlidingTabView.setTabTextColor(Color.BLACK);
mAbSlidingTabView.setTabSelectColor(Color.rgb(30, 168, 131));
mAbSlidingTabView.setTabBackgroundResource(R.drawable.tab_bg);
mAbSlidingTabView.setTabLayoutBackgroundResource(R.drawable.slide_top);
// 演示增加一组
mAbSlidingTabView.addItemViews(tabTexts, mFragments); // 演示增加一个
// mAbSlidingTabView.addItemView("咖啡屋", page5); mAbSlidingTabView.setTabPadding(20, 8, 20, 8);
return view;
} public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
} }

ImageListAdapter.java

package com.example.andbaseexample;

import java.util.List;
import java.util.Map; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView; import com.ab.bitmap.AbImageDownloader;
import com.ab.global.AbConstant;
/**
* 碎片中的图片列表适配器
* @author ZhaoKaiQiang
*
* Time:2014年3月3日
*/
public class ImageListAdapter extends BaseAdapter{ private Context mContext;
//xml转View对象
private LayoutInflater mInflater;
//单行的布局
private int mResource;
//列表展现的数据
private List mData;
//Map中的key
private String[] mFrom;
//view的id
private int[] mTo;
//图片下载器
private AbImageDownloader mAbImageDownloader = null; /**
* 构造方法
* @param context
* @param data 列表展现的数据
* @param resource 单行的布局
* @param from Map中的key
* @param to view的id
*/
public ImageListAdapter(Context context, List data,
int resource, String[] from, int[] to){
this.mContext = context;
this.mData = data;
this.mResource = resource;
this.mFrom = from;
this.mTo = to;
//用于将xml转为View
this.mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//图片下载器
mAbImageDownloader = new AbImageDownloader(mContext);
mAbImageDownloader.setWidth(100);
mAbImageDownloader.setHeight(100);
mAbImageDownloader.setType(AbConstant.SCALEIMG);
mAbImageDownloader.setLoadingImage(R.drawable.image_loading);
mAbImageDownloader.setErrorImage(R.drawable.image_error);
mAbImageDownloader.setNoImage(R.drawable.image_no);
//mAbImageDownloader.setAnimation(true);
} @Override
public int getCount() {
return mData.size();
} @Override
public Object getItem(int position) {
return mData.get(position);
} @Override
public long getItemId(int position){
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent){
final ViewHolder holder;
if(convertView == null){
//使用自定义的list_items作为Layout
convertView = mInflater.inflate(mResource, parent, false);
//减少findView的次数
holder = new ViewHolder();
//初始化布局中的元素
holder.itemsIcon = ((ImageView) convertView.findViewById(mTo[0])) ;
holder.itemsTitle = ((TextView) convertView.findViewById(mTo[1]));
holder.itemsText = ((TextView) convertView.findViewById(mTo[2]));
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
} //获取该行的数据
final Map<String, Object> obj = (Map<String, Object>)mData.get(position);
String imageUrl = (String)obj.get("itemsIcon");
holder.itemsTitle.setText((String)obj.get("itemsTitle"));
holder.itemsText.setText((String)obj.get("itemsText"));
//设置加载中的View
mAbImageDownloader.setLoadingView(convertView.findViewById(R.id.progressBar));
//图片的下载
mAbImageDownloader.display(holder.itemsIcon,imageUrl); return convertView;
} /**
* View元素
*/
static class ViewHolder {
ImageView itemsIcon;
TextView itemsTitle;
TextView itemsText;
ImageButton itemsBtn;
} }

Fragment1.java

package com.example.andbaseexample;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random; import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener; import com.ab.task.AbTaskItem;
import com.ab.task.AbTaskListener;
import com.ab.task.AbTaskQueue;
import com.ab.view.listener.AbOnListViewListener;
import com.ab.view.pullview.AbPullListView; /**
* Activity中嵌入的碎片
* @author ZhaoKaiQiang
*
* Time:2014年3月3日
*/
public class Fragment1 extends Fragment { private Activity mActivity = null;
private List<Map<String, Object>> list = null;
private List<Map<String, Object>> newList = null;
private AbPullListView mAbPullListView = null;
private int currentPage = 1;
private AbTaskQueue mAbTaskQueue = null;
private ArrayList<String> mPhotoList = new ArrayList<String>();
private ImageListAdapter myListViewAdapter = null;
private int total = 50;
private int pageSize = 5; public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mActivity = this.getActivity(); View view = inflater.inflate(R.layout.pull_list, null);
mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i3/13215035600700175/T1C2mzXthaXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i2/13215025617307680/T1AQqAXqpeXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i1/13215035569460099/T16GuzXs0cXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i2/13215023694438773/T1lImmXElhXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i3/13215023521330093/T1BWuzXrhcXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i4/13215035563144015/T1Q.eyXsldXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
mPhotoList.add("http://img01.taobaocdn.com/bao/uploaded/i3/13215023749568975/T1UKWCXvpXXXXXXXXX_!!0-item_pic.jpg_230x230.jpg");
mAbTaskQueue = AbTaskQueue.getInstance();
//获取ListView对象
mAbPullListView = (AbPullListView)view.findViewById(R.id.mListView);
//设置进度条的样式
mAbPullListView.getHeaderView().setHeaderProgressBarDrawable(this.getResources().getDrawable(R.drawable.progress_circular));
mAbPullListView.getFooterView().setFooterProgressBarDrawable(this.getResources().getDrawable(R.drawable.progress_circular));
//ListView数据
list = new ArrayList<Map<String, Object>>(); //使用自定义的Adapter
myListViewAdapter = new ImageListAdapter(mActivity, list,R.layout.list_items,
new String[] { "itemsIcon", "itemsTitle","itemsText" }, new int[] { R.id.itemsIcon,
R.id.itemsTitle,R.id.itemsText });
mAbPullListView.setAdapter(myListViewAdapter);
//item被点击事件
mAbPullListView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
}); return view;
} @Override
public void onStart() {
super.onStart();
//定义两种查询的事件
final AbTaskItem item1 = new AbTaskItem();
item1.listener = new AbTaskListener() { @Override
public void update() {
list.clear();
if(newList!=null && newList.size()>0){
list.addAll(newList);
myListViewAdapter.notifyDataSetChanged();
newList.clear();
}
mAbPullListView.stopRefresh();
} @Override
public void get() {
try {
Thread.sleep(1000);
currentPage = 1;
newList = new ArrayList<Map<String, Object>>();
Map<String, Object> map = null; for (int i = 0; i < pageSize; i++) {
map = new HashMap<String, Object>();
map.put("itemsIcon",mPhotoList.get(new Random().nextInt(mPhotoList.size())));
map.put("itemsTitle", "[Fragment1]"+(i+1));
map.put("itemsText", "[Fragment1]..."+(i+1));
newList.add(map);
}
} catch (Exception e) {
}
};
}; final AbTaskItem item2 = new AbTaskItem();
item2.listener = new AbTaskListener() { @Override
public void update() {
if(newList!=null && newList.size()>0){
list.addAll(newList);
myListViewAdapter.notifyDataSetChanged();
newList.clear();
}
mAbPullListView.stopLoadMore();
} @Override
public void get() {
try {
currentPage++;
Thread.sleep(1000);
newList = new ArrayList<Map<String, Object>>();
Map<String, Object> map = null; for (int i = 0; i < pageSize; i++) {
map = new HashMap<String, Object>();
map.put("itemsIcon",mPhotoList.get(new Random().nextInt(mPhotoList.size())));
map.put("itemsTitle", "item上拉"+((currentPage-1)*pageSize+(i+1)));
map.put("itemsText", "item上拉..."+((currentPage-1)*pageSize+(i+1)));
if((list.size()+newList.size()) < total){
newList.add(map);
}
}
} catch (Exception e) {
currentPage--;
newList.clear();
}
};
}; mAbPullListView.setAbOnListViewListener(new AbOnListViewListener(){ @Override
public void onRefresh() {
mAbTaskQueue.execute(item1);
} @Override
public void onLoadMore() {
mAbTaskQueue.execute(item2);
} }); //第一次下载数据
mAbTaskQueue.execute(item1);
} public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
} }

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

点击下载源代码