安卓笔记.docx

上传人:b****7 文档编号:10440214 上传时间:2023-02-11 格式:DOCX 页数:24 大小:24.29KB
下载 相关 举报
安卓笔记.docx_第1页
第1页 / 共24页
安卓笔记.docx_第2页
第2页 / 共24页
安卓笔记.docx_第3页
第3页 / 共24页
安卓笔记.docx_第4页
第4页 / 共24页
安卓笔记.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

安卓笔记.docx

《安卓笔记.docx》由会员分享,可在线阅读,更多相关《安卓笔记.docx(24页珍藏版)》请在冰豆网上搜索。

安卓笔记.docx

安卓笔记

安卓笔记

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"?

>

#ff494949

#ffffffff

#ff333333

#00000000

#ffdddddd

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1