首先創(chuàng)建工程,并在工程Build PathConfigure Build Path…libraries 中選擇“Add Externel JARs…”,選定
創(chuàng)新互聯(lián)專注于陽高企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城系統(tǒng)網(wǎng)站開發(fā)。陽高網(wǎng)站建設(shè)公司,為陽高等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
MapApi.jar,點(diǎn)擊OK,這樣就可以將高德地圖Android API 庫文件引入。然后在工程Build PathConfigure Build
Path…Order and Export 中將引入的庫文件MapApi.jar 選中,點(diǎn)擊OK,這樣您就可以在您的程序中使用高德地圖API
了。
二、我們在不熟悉的情況下、先盡量多的添加此軟件應(yīng)用權(quán)限;所以在mainifest中添加如下代碼;插入的位置在
application的代碼之前。
Java代碼
uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/uses-permission
uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/uses-permission
uses-permission android:name="android.permission.INTERNET"/uses-permission
uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/uses-permission
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/uses-permission
uses-permission android:name="android.permission.READ_PHONE_STATE"/uses-permission
uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/uses-permission
uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/uses-permission
MapString,List dataMap = new HashMapString,List();
for(int i=0;ixsList.size();i++){
dataMap.put(xsList.get(i).學(xué)號(hào), xsList.get(i));
}
for(int i=0;icjList.size();i++){
dataMap.put(cjList.get(i).學(xué)號(hào), cjList.get(i));
}
得到的dataMap就是需要插入的數(shù)據(jù),不過以前的數(shù)據(jù)需要先刪再插(而且前提是xsList和cjList泛型得相同)。
話說如果不用map還可以用一個(gè)方法:
// 成績表的學(xué)號(hào)List
ListString cjNum = new ArrayListString();
for(int i=0;icjList.size();i++){
cjNum.add(cjList.get(i).學(xué)號(hào));
}
for(int i=0;ixsList.size();i++){
// 學(xué)生表的學(xué)號(hào)在成績表里存在
if(cjNum.contains(xsList.get(i).學(xué)號(hào))){
覆蓋
}else{
// 學(xué)生表的學(xué)號(hào)在成績表里不存在
在cj表創(chuàng)建添加這個(gè)學(xué)生
}
}
用java寫一個(gè)地圖編輯器
記得媒體在采訪c++之父的時(shí)候,他說作為程序員,要相信自己能夠解決已經(jīng)理解的任何事情.
換句話說:您可以解決任何問題,只要想得明白
現(xiàn)實(shí)問題:開發(fā)一個(gè)基于地磚的二維游戲的地圖編輯器,要求生成兩個(gè)binary文件,各包含一個(gè)二維數(shù)組,*.map存放地磚,花花草草什么的.*.item放道具,比如某個(gè)點(diǎn)可能會(huì)觸發(fā)一個(gè)事件.很簡單,隨便寫.看到這里您已經(jīng)大致明白程序的整體結(jié)構(gòu).
計(jì)算機(jī)語言:java.
要理解事件必須分析
初步來看,地圖編輯器:生成某種形式的若干數(shù)組,無論是哪種形式的數(shù)組,你的目的:
生成數(shù)組.地圖是實(shí)際是一個(gè)(x,y)的二維坐標(biāo)系,這很容易讓人聯(lián)系到:亦無論
我準(zhǔn)備把設(shè)置兩個(gè)程序界面(主界面/map界面),java的布局管理器不好擺弄,不如分開兩個(gè)class,主界面用jbuilder自動(dòng)創(chuàng)建的application模塊(帶菜單).map界面自己寫,也是jframe,類之間相互傳遞消息,map界面將在程序開始時(shí)被初始化,也可以在程序從主界面中初始化(有問題)
構(gòu)建程序
以下內(nèi)容為程序代碼:
basepanel.setlayout(new gridlayout(5, 5));
for (byte i = 0; i 9; i++) {
basemapbutton[i] = new
((icon) pic.getimageicon(i, 0));
basemapbutton[i].setbuttontitle(i);
basemapbutton[i].addactionlistener(buttonlistener);
basepanel.add(basemapbutton[i]);
}
itempanel.setlayout(new gridlayout(5, 5));
for (byte i = 0; i 3; i++) {
itemmapbutton[i] = new mapbutton((icon) pic.getimageicon(i, 1));
itemmapbutton[i].setbuttontitle(i);
itemmapbutton[i].addactionlistener(buttonlistener1);
itempanel.add(itemmapbutton[i]);
}
tabbedpane.addtab("bases", basepanel);
tabbedpane.addtab("items", itempanel);
contentpane.add(tabbedpane, borderlayout.center);
有兩個(gè)地方要解釋:
mapbutton:自己寫的一個(gè)類
以下內(nèi)容為程序代碼:
import javax.swing.icon;
import javax.swing.jbutton;
public class mapbutton extends jbutton {
public mapbutton() {
super();
}
public mapbutton(string arg0) {
super(arg0);
}
public mapbutton(action arg0) {
super(arg0);
}
public mapbutton(icon arg0) {
super(arg0);
}
public mapbutton(string arg0, icon arg1) {
super(arg0, arg1);
}
public byte width, height;
//public pic_w, pic_y;
public void setbuttontitle(byte w, byte h) {
width = w;
height = h;
}
public void setbuttontitle(byte w){
width =w;
}
public byte getbuttonwidth() {
return width;
}
public byte getbuttonheight() {
return height;
}
}
pic:自己寫的mappic類的intance:
以下內(nèi)容為程序代碼:
package com.nenghe.mapeditor;
import javax.swing.imageicon;
public class mappic {
imageicon[] baseimages;
imageicon[] itemimages;
imageicon image1;
public mappic() {
init();
}
public void init() {
baseimages = new imageicon[9];
baseimages[0] = new imageicon(mappic.class.getresource("m1.png"/images/wink.gif[/img]);
baseimages[1] = new imageicon(mappic.class.getresource("m2.png"/images/wink.gif[/img]);
baseimages[2] = new imageicon(mappic.class.getresource("m3.png"/images/wink.gif[/img]);
baseimages[3] = new imageicon(mappic.class.getresource("m4.png"/images/wink.gif[/img]);
baseimages[4] = new imageicon(mappic.class.getresource("m5.png"/images/wink.gif[/img]);
baseimages[5] = new imageicon(mappic.class.getresource("m6.png"/images/wink.gif[/img]);
baseimages[6] = new imageicon(mappic.class.getresource("m7.png"/images/wink.gif[/img]);
baseimages[7] = new imageicon(mappic.class.getresource("m8.png"/images/wink.gif[/img]);
baseimages[8] = new imageicon(mappic.class.getresource("m9.png"/images/wink.gif[/img]);
itemimages = new imageicon[3];
itemimages[0] = new imageicon(mappic.class.getresource("error.png"/images/wink.gif[/img]);
itemimages[1] = new imageicon(mappic.class.getresource("i1.png"/images/wink.gif[/img]);
itemimages[2] = new imageicon(mappic.class.getresource("i2.png"/images/wink.gif[/img]);
}
public imageicon getimageicon(int x, int flags) {
if (flags == 0) {
return baseimages[x];
} else if (flags == 1) {
return itemimages[x];
}
return null;
}
}
寫mapbutton在于處理事件的時(shí)候可以準(zhǔn)確的獲得按鈕的坐標(biāo),忘了說了,map界面中我是用按鈕代替地圖方格的.這是很容易想到的,最笨也是最省力的辦法
pic單獨(dú)寫好改,什么時(shí)候內(nèi)容改變了,很容易改,硬要合寫沒有也隨便.
下面就是事件了
有兩個(gè)事件要處理,第一個(gè)是按鈕事件,第二個(gè)菜單事件
按鈕事件我套用這樣的結(jié)構(gòu)
以下內(nèi)容為程序代碼:
actionlistener buttonlistener = new actionlistener() {
public void actionperformed(actionevent e) {
//system.out.println(e.tostring());
mapbutton pressedbutton = (mapbutton) e.getsource();
mapdraw.temp_x = pressedbutton.getbuttonwidth();
mapdraw.temp_y = 0;
//system.out.println(mapdraw.temp_x+" "+mapdraw.temp_y);
}
};
....
basemapbutton[i].addactionlistener(buttonlistener);
jbuilder中把按鈕事件事件單獨(dú)生成一個(gè)類,我不明白,看不懂.真的很高深.
菜單事件模型jbuilder自己加的.overwrite
以下內(nèi)容為程序代碼:
public void *_actionperformed(actionevent e) {...}
用兩個(gè)中間值從主界面向map界面?zhèn)鬟f按了什么:
這里是map界面中的按鈕的事件處理程序
以下內(nèi)容為程序代碼:
actionlistener buttonlistener = new actionlistener() {
public void actionperformed(actionevent e) {
mapbutton pressedbutton = (mapbutton) e.getsource();
pressedwidth = pressedbutton.getbuttonwidth();
pressedheight = pressedbutton.getbuttonheight();
if (temp_y == 0) {
if (item[pressedwidth][pressedheight] != 0) {
item[pressedwidth][pressedheight] = 0;
jfm.showmessage("這里的道具已被置空!\nthe item has been null!"/images/wink.gif[/img];
}
map[pressedwidth][pressedheight] = temp_x;
pressedbutton.seticon((icon) pic.getimageicon(temp_x,
temp_y));
} else {
if (map[pressedwidth][pressedheight] == 0) {
jfm.showmessage("道具不能放在這!\nnot put item at this point!"/images/wink.gif[/img];
} else {
if (temp_x == 0) {
byte value = map[pressedwidth][pressedheight];
item[pressedwidth][pressedheight] = 0;
pressedbutton.seticon((icon) pic.getimageicon(
value, 0));
} else {
pressedbutton.seticon((icon) pic.getimageicon(
temp_x, temp_y));
item[pressedwidth][pressedheight] = temp_x;
}
}
}
}
};
請(qǐng)問兩個(gè)中間值是什么呢?一目了然哦
最后是生成map
以下內(nèi)容為程序代碼:
public void createmap() throws ioexception {
try {
dataoutputstream mapbinaryfile = new dataoutputstream(
new fileoutputstream(mapeditor.filename + "map"/images/wink.gif[/img]);
dataoutputstream itembinaryfile = new dataoutputstream(
new fileoutputstream(mapeditor.filename + "item"/images/wink.gif[/img]);
mapbinaryfile.writebyte(width);
mapbinaryfile.writebyte(height);
for (byte i = 0; i height; i++)
for (byte j = 0; j width; j++) {
//system.out.println(i+" "+j);
byte mapvalue = map[i][j];
byte itemvalue = item[i][j];
if (mapvalue != 0) {
system.out.println(i+" "+j+" "+ mapvalue);
mapbinaryfile.writebyte(j);
mapbinaryfile.writebyte(i);
mapbinaryfile.writebyte(mapvalue);
}
if (itemvalue != 0) {
itembinaryfile.writebyte(j);//x
itembinaryfile.writebyte(i);//y
itembinaryfile.writebyte(itemvalue);
}
}
mapbinaryfile.close();
itembinaryfile.close();
} catch (eofexception e) {
system.err.println("error"/images/wink.gif[/img];
}
}
百度有提供api的,一般是按照api給的網(wǎng)址,在網(wǎng)址后加經(jīng)緯度或者地區(qū)名,但是百度地圖要申請(qǐng)秘鑰的,這個(gè)需要自己去申請(qǐng)一個(gè),免費(fèi)的,類似的功能你可以參考下面的源碼雖然是javascript的,但是java用起來差不多,畢竟你的地圖肯定是在web頁面顯示的
!DOCTYPE?html??
html??
head??
meta?name="viewport"?content="initial-scale=1.0,?user-scalable=no"?/??
meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8"?/??
titleHello,?World/title??
style?type="text/css"??
html{height:100%}??
body{height:100%;margin:0px;padding:0px}??
#container{height:100%}??
/style??
script?type="text/javascript"?src=";ak=您的密鑰"
//v2.0版本的引用方式:src=";ak=您的密鑰"
//v1.4版本及以前版本的引用方式:src=";key=您的密鑰callback=initialize"
/script
/head??
body??
div?id="container"/div?
script?type="text/javascript"?
var?map?=?new?BMap.Map("container");??????????//?創(chuàng)建地圖實(shí)例??
var?point?=?new?BMap.Point(116.404,?39.915);??//?創(chuàng)建點(diǎn)坐標(biāo)??
map.centerAndZoom(point,?15);?????????????????//?初始化地圖,設(shè)置中心點(diǎn)坐標(biāo)和地圖級(jí)別??
/script??
/body??
/html