【Android進階】使用Andbase快速開發架構實現常見側滑欄和滑動標籤頁組合效果

來源:互聯網
上載者:User

最近閑來無事,在網上尋找原始碼看,突然發現了一個國內技術牛人開發的快速開發架構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;@Overridepublic 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() {@Overridepublic void onClick(View arg0) {if (menu.isMenuShowing()) {menu.showContent();} else {menu.showMenu();}}});}@Overridepublic 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(){@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {}     }); return view;} @Overridepublic void onStart() {super.onStart();//定義兩種查詢的事件    final AbTaskItem item1 = new AbTaskItem();item1.listener = new AbTaskListener() {@Overridepublic void update() {list.clear();if(newList!=null && newList.size()>0){                list.addAll(newList);                myListViewAdapter.notifyDataSetChanged();                newList.clear();       }mAbPullListView.stopRefresh();}@Overridepublic 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() {@Overridepublic void update() {if(newList!=null && newList.size()>0){list.addAll(newList);myListViewAdapter.notifyDataSetChanged();newList.clear();                }mAbPullListView.stopLoadMore();}@Overridepublic 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(){@Overridepublic void onRefresh() {mAbTaskQueue.execute(item1);}@Overridepublic void onLoadMore() {mAbTaskQueue.execute(item2);}});    //第一次下載資料mAbTaskQueue.execute(item1);}public void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);}}

最後給出原始碼地址,有問題請留言

點擊下載原始碼


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.