学习笔记:纪念曾经学过的Android,由于负责公司大的方向,向管理方向转型,原先内容一直在有道,为了减少有道笔记在移动端的同步问题,移到博客园。
1、AbActivity
继承后 主要实现标题栏的切换,可写一个基类继承实现基本功能后再让界面继承实现简易化操作;
2、@AbIocView
实现类似AA框架的注解模式.
如:@AbIocView(id=控件ID,Click="方法名") Button button;
按钮还是建议让Activity实现onClickListener接口,然后实现,上面的方面使用:@AbIocView(id=按钮id)Button btn即可。
一、.各种滑动嵌套问题
1、ListView + ViewPager
2、SlidingMenu + ViewPager
二、数据库操作ORM
单表操作(内置存储) DBInsideSampleActivity.java
用DAO 继承 AbDBDaoImpl<对象名称>
//定义数据库操作实现类
private UserInsideDao userDao = null;
三、线程操作
1、线程
AbTask abTask = new AbTask;
定义异步执行的对象
final AbTaskItem item = new AbTaskItem();
item.setListener(new AbTaskListener() {
@Override
public void update() {
AbDialogUtil.removeDialog(ThreadControlActivity.this);
AbToastUtil.showToast(ThreadControlActivity.this,"执行完成");
}
@Override
public void get() {
try {
AbToastUtil.showToastInThread(ThreadControlActivity.this,"开始执行");
Thread.sleep(3000);
//下面写要执行的代码,如下载数据
} catch (Exception e) {
}
};
});
// 执行线程
abTask.execute(item);
2、线程队列 AbTaskQueue
final AbTaskQueue mAbTaskQueue = AbTaskQueue.getInstance();;
3、线程池 AbTaskPool
4、异步任务:AbTask (void)
5、异步任务:AbTask (object)
四、图片下载器
AbImageLoader mAbImageLoader = new AbImageLoader(mContext);
mAbImageLoader.setLoadingImage(R.drawable.image_loading);
mAbImageLoader.setErrorImage(R.drawable.image_error);
mAbImageLoader.setEmptyImage(R.drawable.image_empty);
//设置加载中的View(非必需)
mAbImageLoader.setLoadingView(convertView.findViewById(R.id.progressBar));
//0:表示原图片大小,
mAbImageLoader.setMaxWidth(0);
mAbImageLoader.setMaxHeight(0);
//缩放图片的下载(保持宽高比,计算缩放比例,使一个方向缩放后,另一方向不小与显示的大小的最合适比例)
mAbImageLoader.setMaxWidth(150);
mAbImageLoader.setMaxHeight(150);
//放大图片的下载
mAbImageLoader.setMaxWidth(180);
mAbImageLoader.setMaxHeight(180);
//图片的下载
mAbImageLoader.display(
ImageView,"图片路径");
五、时钟
1、圆形挂钟:AbAnalogClock AnalogClockActivity.java
Drawable 分别为:圆形表的背景,时、分、秒 针;
2、数字时钟:AbNumberClock NumberClockActivity.java
3、台历:AbCalendar DeskCalendarActivity.java
六、旋转效果
1、图片适配
CarouselImageView carousel = (CarouselImageView) findViewById(R.id.carousel);
构建:List<Drawable> 对象
像ListView 方式一样使用:用适配器
CarouselImageAdapter adapter = new CarouselImageAdapter(this,mDrawables,true);
carousel.setAdapter(adapter);
单击和选择事件:
2、VIEW适配
CarouselView carousel = (CarouselView) findViewById(R.id.carousel);
构建:List<View> 对象
像ListView 方式一样使用:用适配器
CarouselViewAdapter adapter = new CarouselViewAdapter(this,mViews,true);
carousel.setAdapter(adapter);
单击和选择事件:
七、侧边栏
<strong>
</strong>1、简单的侧边
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)
//缓存数量
mAbSlidingTabView.getViewPager().setOffscreenPageLimit(5);
其它Tab页面需要继承:AbFragment
2、底部切换TAB
AbBottomTabView mBottomTabView = (AbBottomTabView) findViewById(R.id.mBottomTabView);
//缓存数量
mBottomTabView.getViewPager().setOffscreenPageLimit(5);
九、图表
1、等级条图表:AbLevelSeriesRenderer (LevelChartActivity.java)
1.1 取出LinearLayout
LinearLayout chartLayout = (LinearLayout) findViewById(R.id.chartLayout);
1.2 构建图表对象
AbLevelSeriesRenderer renderer = new AbLevelSeriesRenderer();
1.3 设置属性
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 (每条线都是一个:XYSeriesRenderer)
3、XY柱图 XYMultipleSeriesRenderer (每条线都是一个:XYSeriesRenderer)
和XY线图是一个对象;
上面最后一段
4、饼图 DefaultRenderer (每块都是一个:SimpleSeriesRenderer)
DefaultRenderer renderer = new DefaultRenderer();
5、时间轴图 XYMultipleSeriesRenderer (每条线是一个:XYSeriesRenderer)
6、XY域图 XYMultipleSeriesRenderer (每条线是一个:XYSeriesRenderer) XYAreaChartActivity.java
十、进度条
1、环形进度条:
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、水平进度条:
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、滑动开关按钮 :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>
//设置开关显示所用的图片
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);
//设置开关的默认状态 true开启状态
//holder.itemsCheck.setToggleState(true);
2、图片轮播(实现:类似腾讯新闻首页顶部的幻灯片效果):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);
//构建三个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);
//自动/停止播放
mSlidingPlayView.startPlay();
mSlidingPlayView.stopPlay();
//点击每一项时的方法
//切换或改变到某一项时触发的方法
//结束
3、日历选择器
CalendarView mCalendarView =
//找到线性布局,然后将日历加进来
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,"点击了"+position+"值:"+date);
}
});
4、POP提示框(可以设置上下左右中等 9 个效果)
<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) {
}
});
5、轮子选择器:WheelActivity.java
解释:实现类似IOS的日期、时间、数字方面的轮子选择;
首先要根据需要创建一个布局,如:1,2,3个轮子;
上面的布局创建以后,用下面方法来初始化轮子
十二、下拉刷新分页
1、普通View下拉刷新
实现将所有的内容实现下拉刷新,加载更多;
首先继承AbActivity,并实现 onHeaderRefreshListner,OnFooterLoadListener
实始化:
下拉刷新
上拉加载更多:
多列的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可自定义对话框的显示内容及样式,通过mInflater.infleter(id,null)方式找到view;
说明:showDialog时均为有背景(黑色底,如下图1.1 右),showPanel时均为无背景(如下图1.2 右)
1、通用Dialog
1.1
显示一个自定义的对话框:背景为暗黑色
1.2
显示一个自定义的对话框,无背景色
2. Loding 事件 + Dialog [showLoadDialog/showLoadPanel]
final AbLoadDialogFragment mDialogFragment = AbDialogUtil.showLoadDialog(this, R.drawable.ic_load, "正在查询,请稍候");
mDialogFragment.setAbDialogOnLoadListener(new AbDialogOnLoadListener() {
@Override
public void onLoad() {
// 下载网络数据
downRss(mDialogFragment);
}
});
// 取消的监听
mDialogFragment.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
AbToastUtil.showToast(DialogActivity.this, "Load框被取消");
}
});
NetworkWeb 是一个AbHttpUtil的测试类;
3. refreshing 事件 + Dialog
4、AlterDialog 系统样式
5、自定义样式 Dialog + 动画
6、自定义按钮的位置 (上,中,下,全屏)
7、进度条
十四、HTTP请求
以下用到操作HTTP的GET,POST请求,同时后面介绍到用队列实现快速高频繁调用方法;
1、Http工具类:AbHttpUtil
使用(初始化):
AbHttpUtil
mAbHttpUtil = AbHttpUtil.getInstance(this);
mAbHttpUtil.setTimeout(10000);
调用:
1.1 get 请求
1.2 post 请求
1.3 请求后用 byte[] 字节数组下载(如图片)
1.4 下载文件
下载文件时需要有进度条,下面为开始下载,下载进度及下载完成的代码:
进度条需要有一个VIEW用于显示,VIEW中用到AB的进度条控件
1.5 多File上传(最多两个文件传一次),用POST方法
描述:首先构建AbRequestParams参数
然后POST请求
开始的方法中需要显示进度条:
2、频繁快速响应Request
解释:适合大量频繁快速响应的Http Request,也称为“迷你工具类”,主要用到队列;
首先构建对象:
<strong> </strong>RequestQueue mQueue = Volley.newRequestQueue(this);
Response.Listener<String> mListener = new Response.Listener<String>(){
@Override
public void onResponse(String response) {
AbDialogUtil.showAlertDialog(HttpMiniActivity.this,"返回结果",response.trim(),new AbDialogOnClickListener(){
@Override
public void onNegativeClick() {
}
@Override
public void onPositiveClick() {
}
});
}
};
Response.ErrorListener mErrorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
AbToastUtil.showToast(HttpMiniActivity.this,error.getMessage());
}
};
然后构建要请求的队列(队列中可以有GET,也可以用POST):
最后完成的时候(需重写Activity的finish方法)或者取消时调用:
十五、WebService访问
Soap:实现WebService的调用
类:AbSoapUtil
使用(初始化):
AbSoapUtil abSoapUtil = AbSoapUtil.getInstance(this);
abSoapUtil.setTimeout(1000);
调用: