安卓笔记.docx
- 文档编号:10440214
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:24
- 大小:24.29KB
安卓笔记.docx
《安卓笔记.docx》由会员分享,可在线阅读,更多相关《安卓笔记.docx(24页珍藏版)》请在冰豆网上搜索。
安卓笔记
安卓笔记
Handler的使用:
先创建一个handler对象,然后调用post方法将要执行的线程对象添加到队列当中,将要执行的操作写在线程对象的run方法中
也可以使用handler的sendmessage方法,将一个message添加到消息队列中去:
具体是,先创建一个message对象msg,然后设置msg的arg1的参数。
然后用sendmessage将msg发送到消息队列,然后重写一个内部类handler,复写其中的handlemessage方法。
当接受到msg时,自动调用handlemessage方法。
所以可以在这个方法中实现一些内容。
说明:
用这种方法实际上runnable使用的还是主线程。
可以用java中创建线程的方法来创建子线程。
Handler对线程的处理不是启动一个新线程,而是调用runnable的run函数。
具体的实例:
packagecom.example.handlertest;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.app.Activity;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.ProgressBar;
publicclassMainActivityextendsActivity
{
privateButtonbtn1=null;
privateButtonbtn2=null;
privateProgressBarpb=null;
protectedvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button)findViewById(R.id.btn1);
btn2=(Button)findViewById(R.id.btn2);
btn1.setOnClickListener(newlisten1());
btn2.setOnClickListener(newlisten2());
pb=(ProgressBar)findViewById(R.id.progressBar1);
}
classlisten1implementsOnClickListener
{
publicvoidonClick(Viewv)
{
pb.setVisibility(View.VISIBLE);
System.out.println("visibledezhi:
"+View.VISIBLE);
updateHandler.post(updateThread);
}
}
classlisten2implementsOnClickListener
{
@Override
publicvoidonClick(Viewv)
{
pb.setProgress(0);
updateHandler.removeCallbacks(updateThread);
}
}
HandlerupdateHandler=newHandler()
{
publicvoidhandleMessage(Messagemsg)
{
super.handleMessage(msg);
pb.setProgress(msg.arg1);
updateHandler.post(updateThread);
}
};
RunnableupdateThread=newRunnable()
{
inti=0;
publicvoidrun()
{
i=i+10;
//System.out.println("startThread");
Messagemsg=updateHandler.obtainMessage();
msg.arg1=i;
try
{
Thread.sleep(1000);
}catch(InterruptedExceptione)
{
e.printStackTrace();
}
if(i>100)
{
updateHandler.removeCallbacks(updateThread);
System.out.println("Threadstop"+i);
//i=0;
}
if(i<=100)
{
updateHandler.sendMessage(msg);
}
}
};
}
Bundle的使用
Bundle是一个以String类型为键,以各种类型(基本数据类型)为值的一个map。
HandlerThread的使用
HandlerThread的使用解决了handler队列使用主线程的问题。
msg.obj="abc";//用以传递一个对象
msg.setData//用以传递一个bundle类型的数据
先生成一个handlerThread对象,然后调用start方法,然后使用getlooper方法,生成一个looper,传入到myhandler中去,myhandler为继承自handler的类,需要复写其中的构造方法和handlermessage方法。
具体事例:
packagecom.example.handlertest;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.HandlerThread;
importandroid.os.Looper;
importandroid.os.Message;
importandroid.app.Activity;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.ProgressBar;
publicclassMainActivityextendsActivity
{
privateButtonbtn1=null;
privateButtonbtn2=null;
privateProgressBarpb=null;
protectedvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("mainThread:
"+Thread.currentThread().getId());
System.out.println("mainThreadName:
"+Thread.currentThread().getName());
HandlerThreadhandlerThread=newHandlerThread("handlerThread");
handlerThread.start();
myHandlerhandler=newmyHandler(handlerThread.getLooper());
Messagemsg=handler.obtainMessage();
//msg.obj="abc";//用以传递一个对象
Bundledata=newBundle();
data.putInt("args",1);
data.putString("name","zhandsan");
msg.setData(data);//用以传递一个bundle对象
msg.sendToTarget();
btn1=(Button)findViewById(R.id.btn1);
btn2=(Button)findViewById(R.id.btn2);
btn1.setOnClickListener(newlisten1());
btn2.setOnClickListener(newlisten2());
pb=(ProgressBar)findViewById(R.id.progressBar1);
}
classlisten1implementsOnClickListener
{
publicvoidonClick(Viewv)
{
}
}
classlisten2implementsOnClickListener
{
publicvoidonClick(Viewv)
{
}
}
classmyHandlerextendsHandler
{
myHandler()
{
}
myHandler(Looperlooper)
{
super(looper);
}
publicvoidhandleMessage(Messagemsg)
{
super.handleMessage(msg);
Bundleb=msg.getData();
intage=b.getInt("args");
Stringname=b.getString("name");
System.out.println("argsis:
"+age+"nameis:
"+name);
System.out.println("handlerThread:
"+Thread.currentThread().getId());
System.out.println("handlerThreadName:
"+Thread.currentThread().getName());
}
};
}
Sqlite:
创建:
要使用sqlitedatabase,就需要使用sqliteopenhelper类,又由于sqliteopenhelper是一个抽象类,所以需要写一个类来继承自它。
//sqliteopenhelper这个类作为一个访问数据库的助手类,提供了两个方面的内容
//第一,getReadbleDatabase(),getWritableDatabase(),可以获得sqlitedatabase对象,通过该对象对数据库进行操作
//第二,通过oncreate()和onupdate,允许我们在创建数据库和升级数据库的时候,进行自己的操作
MyDatabaseHelperdbHelper=newMyDatabaseHelper(getApplicationContext(),"caotang");
//只有调用了getWritableDatabase()方法,才能生成一个数据库
SQLiteDatabasedb=dbHelper.getWritableDatabase();
当要向数据库中存储数据时,要用到contentvalues
插入:
//想对该对象当中插入键值对,其中键是列名,值是插入到这一列的值,值的类型必须和列所允许的类型对应
ContentValuesvalues=newContentValues();
values.put("id",1);
values.put("name","zhangsan");
然后生成一个数据库对象,执行插入命令
MyDatabaseHelperdbHelper=newMyDatabaseHelper(getApplicationContext(),"caotang");
SQLiteDatabasedb=dbHelper.getWritableDatabase();
db.insert("user",null,values);
更新:
基本的插入语法:
updatestudentsetxxx=xxxwheresid=2;
//第一个参数,要更新的表名;第二个参数,一个contentvalues对象;第三个参数,是where子句
db.update("user",values,"id=?
",newString[]{"1"});
要用到update方法,其中?
是个占位符,具体的内容写在String数组里面。
MyDatabaseHelperdbHelper=newMyDatabaseHelper(getApplicationContext(),"caotang");
//只有调用了getWritableDatabase()方法,才能生成一个数据库
SQLiteDatabasedb=dbHelper.getWritableDatabase();
ContentValuesvalues=newContentValues();
values.put("name","lisi");
//第一个参数,要更新的表名;第二个参数,一个contentvalues对象;第三个参数,是where子句
db.update("user",values,"id=?
",newString[]{"1"});
查询:
用到了database的query方法,该方法参数众多,publicCursorquery(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy)
Table表示的是表名;columns
MyDatabaseHelperdbHelper=newMyDatabaseHelper(getApplicationContext(),"caotang");
//只有调用了getWritableDatabase()方法,才能生成一个数据库
SQLiteDatabasedb=dbHelper.getWritableDatabase();
Cursorcursor=db.query("user",newString[]{"id","name"},"id=?
",newString[]{"5"},null,null,null);
while(cursor.moveToNext())
{
Stringname=cursor.getString(cursor.getColumnIndex("name"));
System.out.println(name);
}
XX地图:
privateBMapManagermBMapManager;//加载地图的引擎
在setContentView(R.layout.myoverlay_activity);之前要初始化BmapManager
mBMapManager=newBMapManager(getApplicationContext());
mBMapManager.init(KEY,newMKGeneralListener()
{
@Override
publicvoidonGetPermissionState(intarg0)
{
if(arg0==300)
System.out.println("输入的key不正确");
}
@Override
publicvoidonGetNetworkState(intarg0)
{
//TODOAuto-generatedmethodstub
}
然后就可以实例化mapview,最后可以得到一个MapController通过:
mapController=mapView.getController();
//定义一个经纬度,表示一个地理坐标点,存放经度和纬度,以微度的整数形式存储
GeoPointgeoPoint=newGeoPoint((int)(39.963175*1E6),
(int)(116.400244*1E6));
mapController.setCenter(geoPoint);
mapController.setZoom(12);
//显示交通图
//mapView.setTraffic(true);
//显示卫星图
//mapView.setSatellite(true);
地图覆盖物:
∙Overlay:
Overlay是一个基类,它表示可以显示在地图上方的覆盖物。
从2.0.0开始,SDK不支持直接继承Overlay,用户可通过继承ItemizedOverlay来添加覆盖物。
∙ItemizedOverlay自定义覆盖物或标注管理类
通过ItemizedOverlay可以向地图添加一个或多个自定义覆盖物或标注。
添加覆盖物的一般流程:
1.用OverlayItem准备overlay数据。
2.创建ItemizedOverlay实例,调用addItem(OverlayItem)接口添加overlay.
3.若一次性添加的overlay数据较多,可以使用addItem(List)接口.
3.调用MapView.getOverlays().add()方法添加overlay到mapview中。
4.调用MapView.refresh()使Overlay生效。
OverlayItem表示单个overlay数据,如自定义标注,建筑等。
OverlayItem是ItemizedOverlay的基本组件,OverlayItem存储的overlay数据通过ItemizedOverlay添加到地图中。
给地图添加自定义view:
viewCache=getLayoutInflater().inflate(R.layout.custom_text_view,null);得到一个view
popupInfo=(View)viewCache.findViewById(R.id.popinfo);
popupLeft=(View)viewCache.findViewById(R.id.popleft);
popupRight=(View)viewCache.findViewById(R.id.popright);
popupText=(TextView)viewCache.findViewById(R.id.textcache);
button=newButton(this);//创建一个button对象,需要一个context,所以将this传进去button.setBackgroundResource(R.drawable.popup);
然后在继承的ItemizedOverlay中的ontap添加事件,如果要显示pop的话,要使用pop.showpopup(bitmap,geopoint,在y轴的偏移量),所以要建一个bitmap数组,里面存储着三张图片。
建一个类,将一个view编程一个bitmap,其实就是显示view的缩略图。
最后写一个popup监听器,根据得到的index,来进行相应的处理,最后都得mMapView.refresh();下,来更新界面。
安卓界面:
可以新建一个xml,这个是设置空间的背景,其中可以设置颜色和圆角弧度(放在drawable下)
xmlversion="1.0"encoding="utf-8"?
>
android="> color="#ffffffff"/> android: bottomLeftRadius="10.0dip" android: bottomRightRadius="10.0dip" android: topLeftRadius="10.0dip" android: topRightRadius="10.0dip"/> 然后可以新建一个xml设置点击事件,如击中后更改颜色(放在drawable下) xmlversion="1.0"encoding="utf-8"? > android=" drawable="@layout/shape2" android: state_pressed="true"> drawable="@layout/shape"android: state_pressed="false"> 还可以新建一个xml,用于保存一些颜色信息(放在values文件夹下) xmlversion="1.0"encoding="utf-8"? >
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 笔记