zoukankan      html  css  js  c++  java
  • 【Android进阶】使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果

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

    老样子,先上效果图





    ok,下面开始介绍如何使用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);
    	}
    
    }
    

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

    点击下载源代码


  • 相关阅读:
    ProtoType Design Tools
    什么是publickeytoken及publickeytoken的作用
    Windows最高权限system帐户
    Q70 AV01本本安装MAC
    解决MDict3在PPC下乱码的问题
    QT_XSP.CPP
    QT_XSP.CPP
    SetupFactory脚本
    DVD IFO FILE HEADER
    SerialPort comstat is being used without defining
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3749552.html
Copyright © 2011-2022 走看看