學(xué)習(xí)筆記:紀(jì)念曾經(jīng)學(xué)過(guò)的Android,由于負(fù)責(zé)公司大的方向,向管理方向轉(zhuǎn)型,原先內(nèi)容一直在有道,為了減少有道筆記在移動(dòng)端的同步問(wèn)題,移到博客園。
1、AbActivity
繼承后 主要實(shí)現(xiàn)標(biāo)題欄的切換,可寫一個(gè)基類繼承實(shí)現(xiàn)基本功能后再讓界面繼承實(shí)現(xiàn)簡(jiǎn)易化操作;
2、@AbIocView
實(shí)現(xiàn)類似AA框架的注解模式.
如:@AbIocView(id=控件ID,Click="方法名") Button button;
按鈕還是建議讓Activity實(shí)現(xiàn)onClickListener接口,然后實(shí)現(xiàn),上面的方面使用:@AbIocView(id=按鈕id)Button btn即可。
一、.各種滑動(dòng)嵌套問(wèn)題
1、ListView + ViewPager
[圖片上傳中。。。(1)][圖片上傳中。。。(2)][圖片上傳中。。。(3)]
2、SlidingMenu + ViewPager
[圖片上傳中。。。(4)][圖片上傳中。。。(5)]
二、數(shù)據(jù)庫(kù)操作ORM
單表操作(內(nèi)置存儲(chǔ)) DBInsideSampleActivity.java
用DAO 繼承 AbDBDaoImpl<對(duì)象名稱>
//定義數(shù)據(jù)庫(kù)操作實(shí)現(xiàn)類
private UserInsideDao userDao = null;

三、線程操作
1、線程
AbTask abTask = new AbTask;
////定義異步執(zhí)行的對(duì)象
final AbTaskItem item = new AbTaskItem();
item.setListener(new AbTaskListener() {
@Override
public void update() {
AbDialogUtil.removeDialog(ThreadControlActivity.this);
AbToastUtil.showToast(ThreadControlActivity.this,"執(zhí)行完成");
}
@Override
public void get() {
try {
AbToastUtil.showToastInThread(ThreadControlActivity.this,"開始執(zhí)行");
Thread.sleep(3000);
//下面寫要執(zhí)行的代碼,如下載數(shù)據(jù)
} catch (Exception e) {
}
};
});
// 執(zhí)行線程
abTask.execute(item);
2、線程隊(duì)列 AbTaskQueue
final AbTaskQueue mAbTaskQueue = AbTaskQueue.getInstance();;
[圖片上傳中。。。(7)]
[圖片上傳中。。。(8)]

[圖片上傳中。。。(10)][圖片上傳中。。。(11)]

3、線程池 AbTaskPool
[圖片上傳中。。。(13)][圖片上傳中。。。(14)]
4、異步任務(wù):AbTask (void)
[圖片上傳中。。。(15)][圖片上傳中。。。(16)]
5、異步任務(wù):AbTask (object)
[圖片上傳中。。。(17)][圖片上傳中。。。(18)]
四、圖片下載器
AbImageLoader mAbImageLoader = new AbImageLoader(mContext);
mAbImageLoader.setLoadingImage(R.drawable.image_loading);
mAbImageLoader.setErrorImage(R.drawable.image_error);
mAbImageLoader.setEmptyImage(R.drawable.image_empty);
//設(shè)置加載中的View(非必需)
mAbImageLoader.setLoadingView(convertView.findViewById(R.id.progressBar));
//0:表示原圖片大小, mAbImageLoader.setMaxWidth(0);
mAbImageLoader.setMaxHeight(0);
//縮放圖片的下載(保持寬高比,計(jì)算縮放比例,使一個(gè)方向縮放后,另一方向不小與顯示的大小的最合適比例)
mAbImageLoader.setMaxWidth(150);
mAbImageLoader.setMaxHeight(150);
//放大圖片的下載
mAbImageLoader.setMaxWidth(180);
mAbImageLoader.setMaxHeight(180);
//圖片的下載
mAbImageLoader.display(ImageView,"圖片路徑");
五、時(shí)鐘
1、圓形掛鐘:AbAnalogClock AnalogClockActivity.java
[圖片上傳中。。。(19)]
[圖片上傳中。。。(20)][圖片上傳中。。。(21)]
Drawable 分別為:圓形表的背景,時(shí)、分、秒 針;
2、數(shù)字時(shí)鐘:AbNumberClock NumberClockActivity.java
[圖片上傳中。。。(22)][圖片上傳中。。。(23)][圖片上傳中。。。(24)]
[圖片上傳中。。。(25)]
3、臺(tái)歷:AbCalendar DeskCalendarActivity.java
** **[圖片上傳中。。。(26)][圖片上傳中。。。(27)][圖片上傳中。。。(28)]
[圖片上傳中。。。(29)][圖片上傳中。。。(30)]
[圖片上傳中。。。(31)]
六、旋轉(zhuǎn)效果
** **1、圖片適配
CarouselImageView carousel = (CarouselImageView) findViewById(R.id.carousel);
[圖片上傳中。。。(32)][圖片上傳中。。。(33)]
構(gòu)建:List<Drawable> 對(duì)象
[圖片上傳中。。。(34)][圖片上傳中。。。(35)]
像ListView 方式一樣使用:用適配器
CarouselImageAdapter adapter = new CarouselImageAdapter(this,mDrawables,true);
carousel.setAdapter(adapter);
單擊和選擇事件:
[圖片上傳中。。。(36)][圖片上傳中。。。(37)]
2、VIEW適配
CarouselView carousel = (CarouselView) findViewById(R.id.carousel);
[圖片上傳中。。。(38)][圖片上傳中。。。(39)]
構(gòu)建:List<View> 對(duì)象
[圖片上傳中。。。(40)][圖片上傳中。。。(41)]
像ListView 方式一樣使用:用適配器
CarouselViewAdapter adapter = new CarouselViewAdapter(this,mViews,true);
carousel.setAdapter(adapter);
單擊和選擇事件:
[圖片上傳中。。。(42)][圖片上傳中。。。(43)]
七、側(cè)邊欄
** **<strong> </strong>1、簡(jiǎn)單的側(cè)邊 AbSlidingMenuView mAbSlidingView = new AbSlidingMenuView(this); View mainView = mInflater.inflate(R.layout.right, null); View leftView = mInflater.inflate(R.layout.left, null); mAbSlidingView.addView(leftView, layoutParamsFF); mAbSlidingView.addView(mainView, layoutParamsFF); setContentView(mAbSlidingView); 2、左邊欄(//SlidingMenu的配置) SlidingMenu menu = new SlidingMenu(this); menu.setMode(SlidingMenu.LEFT); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 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);//主視圖的Fragment添加 getFragmentManager() .beginTransaction() .replace(R.id.content_frame, new FragmentLoad()) .commit();//menu視圖的Fragment添加 menu.setMenu(R.layout.sliding_menu_menu); getFragmentManager() .beginTransaction() .replace(R.id.menu_frame, new FragmentLoad()) .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(); } }
八、Tab切換
1、頂部切換TAB
AbSlidingTabView mAbSlidingTabView = (AbSlidingTabView) findViewById(R.id.mAbSlidingTabView)
[圖片上傳中。。。(44)][圖片上傳中。。。(45)]
//緩存數(shù)量
mAbSlidingTabView.getViewPager().setOffscreenPageLimit(5);
[圖片上傳中。。。(46)][圖片上傳中。。。(47)]
其它Tab頁(yè)面需要繼承:AbFragment
2、底部切換TAB
AbBottomTabView mBottomTabView = (AbBottomTabView) findViewById(R.id.mBottomTabView);
[圖片上傳中。。。(48)][圖片上傳中。。。(49)]
//緩存數(shù)量
mBottomTabView.getViewPager().setOffscreenPageLimit(5);
[圖片上傳中。。。(50)]
九、圖表
1、等級(jí)條圖表:AbLevelSeriesRenderer (LevelChartActivity.java)
1.1 取出LinearLayout
LinearLayout chartLayout = (LinearLayout) findViewById(R.id.chartLayout);
1.2 構(gòu)建圖表對(duì)象
AbLevelSeriesRenderer renderer = new AbLevelSeriesRenderer();
1.3 設(shè)置屬性
[圖片上傳中。。。(51)][圖片上傳中。。。(52)]
[圖片上傳中。。。(53)]
AbLevelSeriesDataset mDataset = new AbLevelSeriesDataset();
AbLevelView mAbLevelView = AbLevelChartFactory.getLevelChartView(this, mDataset, renderer);
chartLayout.addView(mAbLevelView, new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
2、XY線圖 : XYMultipleSeriesRenderer (每條線都是一個(gè):XYSeriesRenderer)
[圖片上傳中。。。(54)][圖片上傳中。。。(55)]
[圖片上傳中。。。(56)]
[圖片上傳中。。。(57)]
[圖片上傳中。。。(58)]
3、XY柱圖 XYMultipleSeriesRenderer (每條線都是一個(gè):XYSeriesRenderer)
和XY線圖是一個(gè)對(duì)象;
上面最后一段
[圖片上傳中。。。(59)][圖片上傳中。。。(60)]
4、餅圖 DefaultRenderer (每塊都是一個(gè):SimpleSeriesRenderer)
DefaultRenderer renderer = new DefaultRenderer();
[圖片上傳中。。。(61)][圖片上傳中。。。(62)]
5、時(shí)間軸圖 XYMultipleSeriesRenderer (每條線是一個(gè):XYSeriesRenderer)
[圖片上傳中。。。(63)][圖片上傳中。。。(64)]
6、XY域圖 XYMultipleSeriesRenderer (每條線是一個(gè):XYSeriesRenderer) XYAreaChartActivity.java
[圖片上傳中。。。(65)][圖片上傳中。。。(66)]
十、進(jìn)度條
1、環(huán)形進(jìn)度條:
AbCircleProgressBar (ProgressBarCircleActivity.java) <com.ab.view.progress.AbCircleProgressBar android:id="@+id/circleProgressBar" android:layout_width="210dip" android:layout_height="210dip" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> AbCircleProgressBar mAbProgressBar = (AbCircleProgressBar) findViewById(R.id.circleProgressBar); numberText = (TextView) findViewById(R.id.numberText); maxText = (TextView) findViewById(R.id.maxText); maxText.setText("總共 "+String.valueOf(max)); mAbProgressBar.setMax(max); mAbProgressBar.setProgress(progress); mAbProgressBar.setAbOnProgressListener(new AbCircleProgressBar.AbOnProgressListener() { @Override public void onProgress(int progress) { } @Override public void onComplete() { progress = 0; mAbProgressBar.reset(); } });
2、水平進(jìn)度條:
AbHorizontalProgressBar (ProgressBarHorizontalActivity.java) AbHorizontalProgressBar mAbProgressBar = (AbHorizontalProgressBar) findViewById(R.id.horizontalProgressBar); numberText = (TextView) findViewById(R.id.numberText); maxText = (TextView) findViewById(R.id.maxText); maxText.setText("/"+String.valueOf(max)); mAbProgressBar.setMax(max); mAbProgressBar.setProgress(progress); public void startAddProgress() { progress = progress+10; numberText.setText(String.valueOf(progress)); mAbProgressBar.setProgress(progress); mUpdateHandler.sendEmptyMessageDelayed(1, 1000); }mAbProgressBar.setAbOnProgressListener(new AbHorizontalProgressBar.AbOnProgressListener() { @Override public void onProgress(int progress) { } @Override public void onComplete() { progress = 0; mAbProgressBar.reset(); } });
十一、UI控件
1、滑動(dòng)開關(guān)按鈕 :AbSlidingButton
<com.ab.view.sliding.AbSlidingButton android:id="@+id/mSliderBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginTop="8dip" android:layout_marginRight="10dip"> </com.ab.view.sliding.AbSlidingButton> //設(shè)置開關(guān)顯示所用的圖片 holder.itemsCheck.setImageResource(R.drawable.btn_bottom,R.drawable.btn_frame,R.drawable.btn_mask, R.drawable.btn_unpressed,R.drawable.btn_pressed); //holder.itemsCheck.setFocusable(false); //設(shè)置開關(guān)的默認(rèn)狀態(tài) true開啟狀態(tài) //holder.itemsCheck.setToggleState(true);
**2、圖片輪播(實(shí)現(xiàn):類似騰訊新聞首頁(yè)頂部的幻燈片效果):AbSlidingPlayView **
[SlidingPlayViewActivity.java] <com.ab.view.sliding.AbSlidingPlayView android:id="@+id/mAbSlidingPlayView" android:layout_width="fill_parent" android:layout_height="150dip" > </com.ab.view.sliding.AbSlidingPlayView> AbSlidingPlayView mSlidingPlayView = (AbSlidingPlayView)findViewById(R.id.mAbSlidingPlayView); //構(gòu)建三個(gè)VIEW final View mPlayView = mInflater.inflate(R.layout.play_view_item, null); ImageView mPlayImage = (ImageView) mPlayView.findViewById(R.id.mPlayImage); TextView mPlayText = (TextView) mPlayView.findViewById(R.id.mPlayText); mPlayText.setText("1111111111111"); mPlayImage.setBackgroundResource(R.drawable.pic1); final View mPlayView1 = mInflater.inflate(R.layout.play_view_item, null); ImageView mPlayImage1 = (ImageView) mPlayView1.findViewById(R.id.mPlayImage); TextView mPlayText1 = (TextView) mPlayView1.findViewById(R.id.mPlayText); mPlayText1.setText("2222222222222"); mPlayImage1.setBackgroundResource(R.drawable.pic2); final View mPlayView2 = mInflater.inflate(R.layout.play_view_item, null); ImageView mPlayImage2 = (ImageView) mPlayView2.findViewById(R.id.mPlayImage); TextView mPlayText2 = (TextView) mPlayView2.findViewById(R.id.mPlayText); mPlayText2.setText("33333333333333333"); mPlayImage2.setBackgroundResource(R.drawable.pic3); //添加到播放VIEW中 mSlidingPlayView.setNavHorizontalGravity(Gravity.RIGHT); mSlidingPlayView.addView(mPlayView); mSlidingPlayView.addView(mPlayView1); //自動(dòng)/停止播放 mSlidingPlayView.startPlay(); mSlidingPlayView.stopPlay(); //點(diǎn)擊每一項(xiàng)時(shí)的方法
[圖片上傳中。。。(67)] //切換或改變到某一項(xiàng)時(shí)觸發(fā)的方法
[圖片上傳中。。。(68)]
//結(jié)束
[圖片上傳中。。。(69)]
3、日歷選擇器
CalendarView mCalendarView = //找到線性布局,然后將日歷加進(jìn)來(lái) LinearLayout mLinearLayout = (LinearLayout)this.findViewById(R.id.layout01); mCalendarView = new CalendarView(this); mLinearLayout.addView(mCalendarView); mCalendarView.setHeaderHeight(45); mCalendarView.setHeaderTextSize(20); mCalendarView.setBackgroundResource(R.drawable.calendar_bg); mCalendarView.setHeaderBackgroundResource(R.drawable.week_bg); mCalendarView.setOnItemClickListener(new CalendarView.AbOnItemClickListener() { @Override public void onClick(int position) { String date = mCalendarView.getStrDateAtPosition(position); AbToastUtil.showToast(CalendarActivity.this,"點(diǎn)擊了"+position+"值:"+date); } });
4、POP提示框(可以設(shè)置上下左右中等 9 個(gè)效果)
<strong> </strong>AbPopoverView popoverView = new AbPopoverView(this); popoverView = new AbPopoverView(this); popoverView.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.popover_bg)); popoverView.setArrowLeftDrawable(this.getResources().getDrawable(R.drawable.popover_arrow_left)); popoverView.setArrowRightDrawable(this.getResources().getDrawable(R.drawable.popover_arrow_right)); popoverView.setArrowDownDrawable(this.getResources().getDrawable(R.drawable.popover_arrow_down)); popoverView.setArrowUpDrawable(this.getResources().getDrawable(R.drawable.popover_arrow_up)); popoverView.setContentSizeForViewInPopover(new Point(300, 300)); popoverView.setPopoverViewListener(new AbPopoverView.PopoverViewListener() { @Override public void popoverViewWillShow(AbPopoverView view) { } @Override public void popoverViewWillDismiss(AbPopoverView view) { } @Override public void popoverViewDidShow(AbPopoverView view) { } @Override public void popoverViewDidDismiss(AbPopoverView view) { } });
[圖片上傳中。。。(70)]
5、輪子選擇器:WheelActivity.java
**** 解釋:實(shí)現(xiàn)類似IOS的日期、時(shí)間、數(shù)字方面的輪子選擇;
首先要根據(jù)需要?jiǎng)?chuàng)建一個(gè)布局,如:1,2,3個(gè)輪子;
[圖片上傳中。。。(71)]
**[圖片上傳中。。。(72)] **
上面的布局創(chuàng)建以后,用下面方法來(lái)初始化輪子
[圖片上傳中。。。(73)]
[圖片上傳中。。。(74)]
[圖片上傳中。。。(75)]
[圖片上傳中。。。(76)]
十二、下拉刷新分頁(yè)
****1、普通View下拉刷新
實(shí)現(xiàn)將所有的內(nèi)容實(shí)現(xiàn)下拉刷新,加載更多;
首先繼承AbActivity,并實(shí)現(xiàn) onHeaderRefreshListner,OnFooterLoadListener
實(shí)始化:
[圖片上傳中。。。(77)]
下拉刷新
[圖片上傳中。。。(78)]
上拉加載更多:
[圖片上傳中。。。(79)]
多列的ListView瀑布流
<com.ab.view.pullview.AbMultiColumnListView android:id="@+id/mListView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" android:divider="@drawable/list_divider" android:dividerHeight="1dip" > </com.ab.view.pullview.AbMultiColumnListView>
十三、Dialog示例
Dialog可自定義對(duì)話框的顯示內(nèi)容及樣式,通過(guò)mInflater.infleter(id,null)方式找到view;
說(shuō)明:showDialog時(shí)均為有背景(黑色底,如下圖1.1 右),showPanel時(shí)均為無(wú)背景(如下圖1.2 右)
1、通用Dialog
1.1 顯示一個(gè)自定義的對(duì)話框:背景為暗黑色
[圖片上傳中。。。(80)][圖片上傳中。。。(81)]
1.2 顯示一個(gè)自定義的對(duì)話框,無(wú)背景色
[圖片上傳中。。。(82)][圖片上傳中。。。(83)]
2. Loding 事件 + Dialog [showLoadDialog/showLoadPanel]
final AbLoadDialogFragment mDialogFragment = AbDialogUtil.showLoadDialog(this, R.drawable.ic_load, "正在查詢,請(qǐng)稍候"); mDialogFragment.setAbDialogOnLoadListener(new AbDialogOnLoadListener() { @Override public void onLoad() { // 下載網(wǎng)絡(luò)數(shù)據(jù) downRss(mDialogFragment); } }); // 取消的監(jiān)聽(tīng) mDialogFragment.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { AbToastUtil.showToast(DialogActivity.this, "Load框被取消"); } });
[圖片上傳中。。。(84)] NetworkWeb 是一個(gè)AbHttpUtil的測(cè)試類;
- refreshing 事件 + Dialog
[圖片上傳中。。。(85)]
4、AlterDialog 系統(tǒng)樣式
[圖片上傳中。。。(86)][圖片上傳中。。。(87)]
[圖片上傳中。。。(88)][圖片上傳中。。。(89)]
[圖片上傳中。。。(90)][圖片上傳中。。。(91)]
5、自定義樣式 Dialog + 動(dòng)畫
** [圖片上傳中。。。(92)][圖片上傳中。。。(93)]**
[圖片上傳中。。。(94)][圖片上傳中。。。(95)]
** [圖片上傳中。。。(96)][圖片上傳中。。。(97)]**
** 6、自定義按鈕的位置 (上,中,下,全屏)**
** [圖片上傳中。。。(98)]**
7、進(jìn)度條
** [圖片上傳中。。。(99)]**
** [圖片上傳中。。。(100)]**
十四、HTTP請(qǐng)求
** **以下用到操作HTTP的GET,POST請(qǐng)求,同時(shí)后面介紹到用隊(duì)列實(shí)現(xiàn)快速高頻繁調(diào)用方法;
1、Http工具類:AbHttpUtil
使用(初始化): AbHttpUtil mAbHttpUtil = AbHttpUtil.getInstance(this);
mAbHttpUtil.setTimeout(10000);
調(diào)用:
1.1 get 請(qǐng)求
[圖片上傳中。。。(101)]
1.2 post 請(qǐng)求
[圖片上傳中。。。(102)]
1.3 請(qǐng)求后用 byte[] 字節(jié)數(shù)組下載(如圖片)
[圖片上傳中。。。(103)]
1.4 下載文件
[圖片上傳中。。。(104)]
下載文件時(shí)需要有進(jìn)度條,下面為開始下載,下載進(jìn)度及下載完成的代碼:
[圖片上傳中。。。(105)]
進(jìn)度條需要有一個(gè)VIEW用于顯示,VIEW中用到AB的進(jìn)度條控件