android学习指南?自学java做android studio的毕设怎么学啊
朋友们,android学习指南和自学java做android studio的毕设怎么学啊是当今热门话题,但是它们的内涵和影响力可能会让人感到困惑。在本篇文章中,我将为你们揭示它们的本质和重要性,希望能够为你们带来新的认识。
安卓开发:Android创建和使用数据库详细指南
数据库支持每个应用程序无论大小的生命线,除非你的应用程序只处理简单的数据,那么就需要一个数据库系统存储你的结构化数据,Android使用SQLite数据库,它是一个开源的、支持多操作系统的SQL数据库,在许多领域广泛使用,如Mozilla FireFox就是使用SQLite来存储配置数据的,iPhone也是使用SQLite来存储数据的。
在Android中,你为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据库位于Android设备/data/data//databases文件夹中,在这篇文章中,你将会学习到如何在Android中创建和使用数据库。
SQLite数据库
使用Eclipse创建一个Android项目,取名为Database,如图1所示:
创建DBAdapter辅助类
操作数据库的最佳实践是创建一个辅助类,由它封装所有对数据库的复杂访问,对于调用代码而言它是透明的,因此我创建了一个DBAdapter的辅助类,由它创建、打开、关闭和使用SQLite数据库。
首先,在src/
文件夹(在这个例子中是src/net.learn2develop.Database)下添加一个DBAdapter.java文件。
在DBAdapter.java文件中,导入所有你要使用到的命名空间:
package net.learn2develop.Databases;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter
{
}
接下来创建一个数据库,取名为bookstitles,字段如图2所示。
在DBAdapter.java文件中,定义清单1中的常量。
清单1定义DBAdapter.java文件中的常量
package net.learn2develop.Database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter
{
public static final String KEY_ROWID= _id;
public static final String KEY_ISBN= isbn;
public static final String KEY_TITLE= title;
public static final String KEY_PUBLISHER= publisher;
private static final String TAG= DBAdapter;
private static final String DATABASE_NAME= books;
private static final String DATABASE_TABLE= titles;
private static final int DATABASE_VERSION= 1;
private static final String DATABASE_CREATE=
create table titles(_id integer primary key autoincrement,
+ isbn text not null, title text not null,
+ publisher text not null);;
private final Context context;
}
DATABASE_CREATE常量包括创建titles表的SQL语句。
在DBAdapter类中,你可以扩展SQLiteOpenHelper类,它是一个Android辅助类,主要用于数据库创建和版本管理。实际上,你可以覆盖onCreate()和onUpgrade()方法,如清单2所示。
清单2在DBAdapter类中,扩展SQLiteOpenHelper类覆盖onCreate()和 onUpgrade()方法
package net.learn2develop.Database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter
{
public static final String KEY_ROWID= _id;
public static final String KEY_ISBN= isbn;
public static final String KEY_TITLE= title;
public static final String KEY_PUBLISHER= publisher;
private static final String TAG= DBAdapter;
private static final String DATABASE_NAME= books;
private static final String DATABASE_TABLE= titles;
private static final int DATABASE_VERSION= 1;
private static final String DATABASE_CREATE=
create table titles(_id integer primary key autoincrement,
+ isbn text not null, title text not null,
+ publisher text not null);;
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx)
{
this.context= ctx;
DBHelper= new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.w(TAG, Upgrading database from version+ oldVersion
+ to
+ newVersion+, which will destroy all old data);
db.execSQL("DROP TABLE IF EXISTS titles");
onCreate(db);
}
}
}
onCreate()方法创建一个新的数据库,onUpgrade()方法用于升级数据库,这可以通过检查DATABASE_VERSION常量定义的值来实现,对于onUpgrade()方法而言,只不过是简单地删除表,然后在创建表而已。
#p#副标题#e#
现在你可以定义不同的方法来打开和关闭数据库,如清单3中的添加/编辑/删除/行的函数。
清单3定义打开和关闭数据库以及增加/编辑/删除表中行的方法
public class DBAdapter
{
//...
//...
//---打开数据库---
public DBAdapter open() throws SQLException
{
db= DBHelper.getWritableDatabase();
return this;
}
//---关闭数据库---
public void close()
{
DBHelper.close();
}
//---向数据库插入一个标题---
public long insertTitle(String isbn, String title, String publisher)
{
ContentValues initialValues= new ContentValues();
initialValues.put(KEY_ISBN, isbn);
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_PUBLISHER, publisher);
return db.insert(DATABASE_TABLE, null, initialValues);
}
//---删除一个指定的标题---
public boolean deleteTitle(long rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID+=+ rowId, null)
0;
}
//---检索所有标题---
public Cursor getAllTitles()
{
return db.query(DATABASE_TABLE, new String[]{
KEY_ROWID,
KEY_ISBN,
KEY_TITLE,
KEY_PUBLISHER},
null,
null,
null,
null,
null);
}
//---检索一个指定的标题---
public Cursor getTitle(long rowId) throws SQLException
{
Cursor mCursor=
db.query(true, DATABASE_TABLE, new String[]{
KEY_ROWID,
KEY_ISBN,
KEY_TITLE,
KEY_PUBLISHER
},
KEY_ROWID+=+ rowId,
null,
null,
null,
null,
null);
if(mCursor!= null){
mCursor.moveToFirst();
}
return mCursor;
}
//---更新一个标题---
public boolean updateTitle(long rowId, String isbn,
String title, String publisher)
{
ContentValues args= new ContentValues();
args.put(KEY_ISBN, isbn);
args.put(KEY_TITLE, title);
args.put(KEY_PUBLISHER, publisher);
return db.update(DATABASE_TABLE, args,
KEY_ROWID+=+ rowId, null)
0;
}
}Database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter
{
public static final String KEY_ROWID= _id;
public static final String KEY_ISBN= isbn;
public static final String KEY_TITLE= title;
public static final String KEY_PUBLISHER= publisher;
private static final String TAG= DBAdapter;
private static final String DATABASE_NAME= books;
private static final String DATABASE_TABLE= titles;
private static final int DATABASE_VERSION= 1;
private static final String DATABASE_CREATE=
create table titles(_id integer primary key autoincrement,
+ isbn text not null, title text not null,
+ publisher text not null);;
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx)
{
this.context= ctx;
DBHelper= new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.w(TAG, Upgrading database from version+ oldVersion
+ to
+ newVersion+, which will destroy all old data);
db.execSQL("DROP TABLE IF EXISTS titles");
onCreate(db);
}
}
//---打开数据库---
public DBAdapter open() throws SQLException
{
db= DBHelper.getWritableDatabase();
return this;
}
//---关闭数据库---
public void close()
{
DBHelper.close();
}
//---向数据库中插入一个标题---
public long insertTitle(String isbn, String title, String publisher)
{
ContentValues initialValues= new ContentValues();
initialValues.put(KEY_ISBN, isbn);
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_PUBLISHER, publisher);
return db.insert(DATABASE_TABLE, null, initialValues);
}
//---删除一个指定标题---
public boolean deleteTitle(long rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID+
=+ rowId, null)
0;
}
//---检索所有标题---
public Cursor getAllTitles()
{
return db.query(DATABASE_TABLE, new String[]{
KEY_ROWID,
KEY_ISBN,
KEY_TITLE,
KEY_PUBLISHER},
null,
null,
null,
null,
null);
}
//---检索一个指定标题---
public Cursor getTitle(long rowId) throws SQLException
{
Cursor mCursor=
db.query(true, DATABASE_TABLE, new String[]{
KEY_ROWID,
KEY_ISBN,
KEY_TITLE,
KEY_PUBLISHER
},
KEY_ROWID+=+ rowId,
null,
null,
null,
null,
null);
if(mCursor!= null){
mCursor.moveToFirst();
}
return mCursor;
}
//---更新一个标题---
public boolean updateTitle(long rowId, String isbn,
String title, String publisher)
{
ContentValues args= new ContentValues();
args.put(KEY_ISBN, isbn);
args.put(KEY_TITLE, title);
args.put(KEY_PUBLISHER, publisher);
return db.update(DATABASE_TABLE, args,
KEY_ROWID+=+ rowId, null)
0;
}
}
注意Android使用Cursor类返回一个需要的值,Cursor作为一个指针从数据库查询返回结果集,使用Cursor允许Android更有效地管理它们需要的行和列,你使用ContentValues对象存储键/值对,它的put()方法允许你插入不同数据类型的键值。
清单4显示了完整的DBAdapter.java源代码。
清单4 DBAdapter.java完整源代码
package net.learn2develop.
#p#副标题#e#
Android开发权威指南的图书目录
第一部分准备篇
第1章初识庐山真面目——Android开发简介2
1.1Android的基本概念2
1.1.1Android简介2
1.1.2Android的版本4
1.1.3Android的系统构架5
1.1.4Android的应用程序框架6
1.2JIL Widget介绍7
1.3小结8
第2章工欲善其事,必先利其器——搭建和使用Android开发环境9
2.1开发包及工具的安装9
2.1.1开发Android程序都需要些什么9
2.1.2安装JDK和配置Java开发环境10
2.1.3Eclipse的安装与汉化11
2.1.4安装AndroidSDK12
2.1.5安装Eclipse插件ADT13
2.2真实体验——编写第一个Android程序(随机绘制圆饼)15
2.2.1创建Android工程15
2.2.2在模拟器中运行Android程序17
2.2.3界面控件的布局19
2.2.4编写代码20
2.2.5调试程序23
2.2.6在手机上运行和调试程序28
2.3迁移Android工程可能发生的错误29
2.4不需要写一行代码的开发工具:AppInventor31
2.4.1AppInventor简介31
2.4.2AppIntentor的下载和安装31
2.4.3用拖曳控件的方式设计界面33
2.4.4像拼图一样拼装代码34
2.5小结37
第二部分基础篇
第3章千里之行始于足下——Android程序设计基础40
3.1Android应用程序框架40
3.1.1Android项目的目录结构40
3.1.2AndroidManifest.xml文件的结构42
3.2Android应用程序中的资源44
3.3Android的应用程序组件44
3.3.1Activity(Android的窗体)45
3.3.2Service(服务)45
3.3.3Broadcast Receiver(广播接收器)45
3.3.4Content Provider(内容提供者)46
3.4Android程序的UI设计46
3.4.1手工配置XML布局文件46
3.4.2ADT自带的可视化UI设计器47
3.4.3使用DroidDraw设计UI布局47
3.5小结48
第4章我的UI我做主——用户界面开发基础49
4.1Activity的使用方法49
4.1.1创建Activity49
4.1.2配置Activity50
4.1.3显示其他的Activity(Intent与Activity)52
4.2Activity的生命周期55
4.3在不同Activity之间传递数据60
4.3.1使用Intent传递数据60
4.3.2使用静态变量传递数据62
4.3.3使用剪切板传递数据63
4.3.4使用全局对象传递数据65
4.3.5返回数据到前一个Activity67
4.4视图(View)68
4.4.1视图简介68
4.4.2使用XML布局文件定义视图69
4.4.3在代码中控制视图70
4.5布局(Layout)72
4.5.1框架布局(FrameLayout)72
4.5.2线性布局(LinearLayout)75
4.5.3相对布局(RelativeLayout)79
4.5.4表格布局(TableLayout)81
4.5.5绝对布局(AbsoluteLayout)82
4.5.6重用XML布局文件82
4.5.7优化XML布局文件85
4.5.8查看apk文件中的布局86
4.6小结87
第5章良好的学习开端——控件(Widget)详解88
5.1常用XML属性解析88
5.1.1android:id属性88
5.1.2控件的宽度(android:layout_width)和高度(android:layout_height)88
5.1.3android:layout_margin属性89
5.1.4android:padding属性89
5.1.5android:layout_weight属性90
5.1.6android:layout_gravity和android:gravity属性90
5.1.7android:visibility属性91
5.1.8android:background属性91
5.1.9指定单击事件方法(android:onClick属性)92
5.1.10控件焦点属性(android:focusable和android:focusable-InTouchMode)92
5.2TextView(显示文本的控件)93
5.2.1显示富文本(URL、不同大小、字体、颜色的文本)93
5.2.2在TextView中显示表情图像和文字97
5.2.3单击链接弹出Activity100
5.2.4为指定文本添加背景103
5.2.5带边框的TextView106
5.2.6设置行间距110
5.2.7在未显示完的文本后面加省略号(…)111
5.2.8用TextView实现走马灯效果113
5.2.9垂直滚动TextView中的文本114
5.3EditText(编辑文本的控件)115
5.3.1像QQ一样输入表情图像115
5.3.2在EditText中输入特定的字符117
5.3.3AutoCompleteText-View(自动完成输入内容的控件)118
5.4按钮和复选框控件120
5.4.1Button(普通按钮控件)120
5.4.2图文混排的按钮122
5.4.3ImageButton(图像按钮控件)124
5.4.4RadioButton(选项按钮控件)124
5.4.5ToggleButton(开关状态按钮控件)125
5.4.6CheckBox(复选框控件)126
5.5ImageView(显示图像的控件)128
5.5.1ImageView控件的基本用法128
5.5.2显示指定区域的图像129
5.5.3缩放和旋转图像132
5.6时间与日期控件133
5.6.1DatePicker(输入日期的控件)133
5.6.2TimePicker(输入时间的控件)134
5.6.3DatePicker、TimePicker与TextView同步显示日期和时间134
5.6.4AnalogClock和DigitalClock(显示时钟的控件)136
5.7进度条控件137
5.7.1ProgressBar(进度条控件)137
5.7.2SeekBar(拖动条控件)139
5.7.3设置ProgressBar和SeekBar的颜色及背景图140
5.7.4RatingBar(评分控件)143
5.8列表控件145
5.8.1ListView(普通列表控件)145
5.8.2为ListView列表项添加复选框和选项按钮147
5.8.3对列表项进行增、删、改操作149
5.8.4改变列表项的背景色153
5.8.5ListActivity(封装ListView的Activity)154
5.8.6ExpandableListView(可扩展的列表控件)155
5.8.7Spinner(下拉列表控件)157
5.9滚动控件160
5.9.1ScrollView(垂直滚动控件)160
5.9.2HorizontalScrollView(水平滚动控件)161
5.9.3可垂直和水平滚动的视图162
5.9.4Gallery(画廊控件)163
5.10ImageSwitcher(图像切换控件)164
5.11GridView(网格控件)166
5.12TabHost(标签控件)168
5.13ViewStub(惰性装载控件)169
5.14小结171
第6章友好的菜单——Menu介绍与实例172
6.1菜单的基本用法172
6.1.1创建选项菜单(Options Menu)172
6.1.2带图像的选项菜单173
6.1.3关联Activity173
6.1.4响应菜单的单击动作174
6.1.5动态添加、修改和删除选项菜单175
6.1.6带复选框和选项按钮的子菜单176
6.1.7上下文菜单178
6.1.8菜单事件179
6.1.9从菜单资源中装载菜单180
6.2菜单特效181
6.2.1自定义菜单181
6.2.2模拟UCWeb效果菜单184
6.2.3QuickContactBadge与联系人菜单189
6.3小结192
第7章友好地互动交流——信息提醒(对话框、Toast与Notification)193
7.1对话框的基本用法193
7.1.1带2个按钮(确认/取消)的对话框193
7.1.2带3个按钮(覆盖/忽略/取消)的对话框195
7.1.3简单列表对话框196
7.1.4单选列表对话框198
7.1.5多选列表对话框199
7.1.6进度对话框201
7.1.7登录对话框205
7.1.8使用Activity托管对话框207
7.2对话框的高级应用209
7.2.1阻止单击按钮关闭对话框209
7.2.2改变对话框的显示位置213
7.2.3在对话框按钮和内容文本中插入图像215
7.2.4改变对话框的透明度216
7.3Toast217
7.3.1Toast的基本用法217
7.3.2永不关闭的Toast218
7.3.3用PopupWindow模拟Toast提示信息框221
7.4通知(Notification)221
7.4.1在状态栏上显示通知信息222
7.4.2Notification的清除动作224
7.4.3永久存在的Notification225
7.4.4自定义Notification226
7.5小结227
第8章移动的信息仓库——数据存储228
8.1读写key-value对:SharedPreferences228
8.1.1SharedPreferences的基本用法228
8.1.2数据的存储位置和格式229
8.1.3存取复杂类型的数据230
8.1.4设置数据文件的访问权限233
8.1.5可以保存设置的Activity:PreferenceActivity234
8.2文件存储238
8.2.1openFileOutput和openFileInput方法238
8.2.2读写SD卡中的文件239
8.2.3SAX引擎读取XML文件的原理241
8.2.4将XML文件转换成Java对象242
8.2.5文件压缩(Jar、Zip)245
8.3SQLite数据库249
8.3.1SQLite数据库管理工具249
8.3.2SQLiteOpenHelper类与自动升级数据库251
8.3.3数据绑定与SimpleCursorAdapter类252
8.3.4操作SD卡上的数据库255
8.3.5将数据库与应用程序一起发布256
8.3.6内存数据库257
8.4小结258
第9章Android中的窗口——Activity259
9.1调用其他程序中的Activity259
9.1.1直接拨号259
9.1.2将电话号传入拨号程序259
9.1.3调用拨号程序260
9.1.4浏览网页261
9.1.5向E-mail客户端传递E-mail地址261
9.1.6发送E-mail261
9.1.7查看联系人262
9.1.8显示系统设置界面(设置主界面、Wifi设置界面)263
9.1.9启动处理音频的程序264
9.2自定义Activity Action264
9.3Activity的高级应用266
9.3.1ActivityGroup266
9.3.2自定义半透明窗口268
9.3.3Activity之间切换的动画效果269
9.4小结270
第10章全局事件——广播(Broadcast)271
10.1什么是广播271
10.2接收系统广播272
10.2.1短信拦截272
10.2.2用代码注册广播接收器274
10.2.3广播接收器的优先级275
10.2.4来去电拦截276
10.2.5截获屏幕休眠与唤醒280
10.2.6开机自动运行281
10.2.7显示手机电池的当前电量282
10.3发送广播284
10.4验证广播接收器是否注册285
10.5小结286
第11章跨应用数据源——Content Provider287
11.1Content Provider的作用287
11.2获得系统数据288
11.2.1读取联系人信息288
11.2.2查看收到的短信290
11.3自定义Content Provider291
11.3.1查询城市信息291
11.3.2为Content Provider添加访问权限297
11.4小结298
第12章一切为用户服务——Service基础与实例299
12.1Service基础299
12.1.1Service的生命周期299
12.1.2绑定Activity和Service302
12.1.3开机启动Service305
12.1.4判断Service是否已注册306
12.1.5判断Service是否已开始307
12.2跨进程访问(AIDL服务)308
12.2.1什么是AIDL服务308
12.2.2建立AIDL服务的步骤308
12.2.3建立AIDL服务308
12.2.4传递复杂数据的AIDL服务312
12.2.5AIDL与来去电自动挂断317
12.3小结319
第13章做好应用桥梁——网络与通信320
13.1WebView控件320
13.1.1用WebView控件浏览网页320
13.1.2用WebView控件装载HTML代码322
13.2访问HTTP资源324
13.2.1提交HTTP GET和HTTP POST请求324
13.2.2HttpURLConnection类326
13.2.3上传文件327
13.3客户端Socket330
13.3.1连接服务器331
13.3.2扫描服务器打开的端口331
13.3.3发送和接收数据333
13.3.4获得无线路由分配给手机的IP地址334
13.3.5设置Socket选项335
13.4服务端Socket339
13.4.1手机服务器的实现339
13.4.2利用Socket在应用程序之间通信340
13.5蓝牙通信342
13.5.1蓝牙简介342
13.5.2打开和关闭蓝牙设备343
13.5.3搜索蓝牙设备344
13.5.4蓝牙数据传输346
13.6小结351
第14章炫酷你的应用——多媒体开发352
14.1音乐352
14.1.1播放音乐352
14.1.2录音353
14.2视频354
14.2.1使用VideoView播放视频354
14.2.2使用SurfaceView播放视频355
14.2.3录制视频357
14.3相机357
14.3.1调用系统的拍照功能358
14.3.2自定义拍照功能359
14.4铃声364
14.5小结366
第15章2D游戏开发367
15.1绘制游戏的画布367
15.1.1在View上实现动画效果367
15.1.2在SurfaceView上实现动画效果371
15.2图形绘制基础374
15.2.1绘制像素点374
15.2.2绘制直线374
15.2.3绘制圆形375
15.2.4绘制弧375
15.2.5绘制文本376
15.2.6综合绘制各种图形376
15.3高级图像处理技术380
15.3.1绘制位图380
15.3.2图像的透明度382
15.3.3旋转图像383
15.3.4路径384
15.3.5Shader的渲染效果388
15.4帧(Frame)动画392
15.4.1AnimationDrawable与帧动画392
15.4.2播放Gif动画394
15.5补间(Tween)动画397
15.5.1移动补间动画397
15.5.2缩放补间动画399
15.5.3旋转补间动画402
15.5.4透明度补间动画403
15.6小结404
第16章有趣的Android应用405
16.1传感器405
16.1.1如何使用传感器405
16.1.2加速度传感器(Accelerometer)409
16.1.3重力传感器(Gravity)409
16.1.4光线传感器(Light)410
16.1.5陀螺仪传感器(Gyroscope)411
16.1.6方向传感器(Orientation)411
16.1.7其他传感器412
16.2输入输出技术413
16.2.1语音识别413
16.2.2手势输入415
16.2.3语音朗读(TTS)417
16.3Google地图419
16.4GPS定位423
16.5桌面上的小东西425
16.5.1窗口小部件(AppWidget)425
16.5.2快捷方式431
16.5.3实时文件夹433
16.6应用更华丽——动态壁纸435
16.7小结441
第三部分高级篇
第17章HTML5与移动Web开发444
17.1HTML5简介444
17.2HTML5精彩效果演示445
17.3HTML5在Android中的应用447
17.4HTML5的画布(Canvas)448
17.4.1Canvas概述448
17.4.2检测浏览器是否支持Canvas449
17.4.3在Web页面中使用Canvas450
17.4.4使用路径(Path)452
17.4.5设置线条风格453
17.4.6设置填充类型453
17.4.7填充矩形区域454
17.4.8使用渐变色(Gradient)454
17.4.9拉伸画布对象455
17.4.10在Canvas上绘制文本456
17.4.11使用阴影457
17.5调试JavaScript458
17.6小结459
第18章输入法开发460
18.1Android输入法简介460
18.2控制输入法461
18.3输入法实战462
18.3.1实现输入法的步骤463
18.3.2编写输入法程序463
18.3.3输入法服务的生命周期466
18.3.4预输入文本467
18.3.5输入法设置467
18.4小结468
第19章Android OpenGL ES开发基础469
19.1OpenGL简介469
19.2什么是OpenGL ES469
19.3多边形470
19.4颜色474
19.5旋转三角形475
19.6旋转立方体477
19.7小结478
第20章OpenGL ES的超酷效果479
20.1保持平衡的旋转文本479
20.2左右摇摆的Android机器人482
20.3纠缠在一起的旋转立方体485
20.4透明背景的旋转立方体486
20.5触摸旋转的立方体487
20.62D和3D的综合旋转效果489
20.7旋转立体天空491
20.8小结493
第21章Android NDK编程494
21.1Android NDK简介494
21.2安装、配置和测试NDK开发环境495
21.2.1系统和软件要求495
21.2.2下载和安装Android NDK495
21.2.3下载和安装Cygwin495
21.2.4配置Android NDK的开发环境498
21.3第一个NDK程序:世界你好499
21.3.1编写和调用NDK程序499
21.3.2用命令行方式编译NDK程序501
21.3.3在Eclipse中集成Android NDK502
21.4背景不断变化的三角形(NDK版OpenGL ES)504
21.5使用NDK OpenGL ES API实现千变万化的3D效果507
21.6使用NDK调用音频API510
21.7本地Activity(Native Activity)511
21.8Android NDK配置文件详解513
21.8.1Android NDK定义的变量513
21.8.2Android NDK定义的函数514
21.8.3描述模块的变量515
21.8.4配置Application mk文件516
21.9小结516
第22章测试驱动开发(TDD)517
22.1JUnit测试框架517
22.2测试Activity517
22.3测试Content Provider521
22.4测试Service523
22.5测试普通类523
22.6小结525
第四部分综合实例篇
第23章Android综合案例一——蓝牙聊天528
23.1蓝牙聊天主界面528
23.2添加选项菜单530
23.3搜索和连接蓝牙设备530
23.4使设备可被其他蓝牙设备发现533
23.5发送和接收聊天信息533
23.6小结537
第24章Android综合案例二——月球登陆(游戏)538
24.1游戏的玩法538
24.2实现游戏界面539
24.3设置游戏难度540
24.4开始游戏541
24.5控制飞船喷火544
24.6控制飞船改变飞行方向544
24.7判断飞船是否成功着陆545
24.8小结546
第25章Android综合案例三——全键盘输入法(应用)547
25.1安装输入法547
25.2输入法的初始化工作548
25.3响应键盘操作549
25.4根据EditText控件的属性显示不同的软键盘551
25.5小结553
第26章Android综合案例四——贪吃蛇(游戏)554
26.1游戏玩法554
26.2游戏主界面设计555
26.3控制小蛇的移动557
26.4小结560
第27章Android综合案例五——新浪微博客户端(应用)561
27.1新浪微博简介561
27.1.1新浪微博客户端561
27.1.2新浪微博开放API563
27.2使用新浪微博开发API563
27.3创建和配置新浪微博客户端工程564
27.4登录新浪微博564
27.5功能按钮567
27.6显示“我的首页”的微博569
27.7评论微博572
27.8转发微博573
27.9写微博574
27.10小结576
第28章Android综合案例六——笑脸连连看(游戏)577
28.1游戏玩法577
28.2准备图像素材578
28.3实现主界面578
28.4随机生成连连看图像580
28.5选中两个相同图像后消失580
28.6用定时器限制游戏时间581
28.7小结582
自学java做android studio的毕设怎么学啊
1.Java基础;2.搭建Android开发环境3.了解Android运行原理以及一个工程项目结构4.如何系统学习Android5.推荐一些实用的资源6.总结(注:一直没有时间整理一些链接文件,看到大家对这篇文章这么感兴趣,我重新整理我文章里面的链接,朋友们可以点击进去看一看,都是我精心整理的一些资料,希望对你们有所帮助。文章仅是个人意见,不喜勿喷,如果有更好意见和简介,欢迎交流!(鞠躬))!
java语言基础
首先肯定需要的就是java语言了,虽然有一些别的语言也可以开发android,但是都是小众。因为Android SDK是基于Java开发的,使用的语言是Java,如果有了Java基础,学Android就会事半功倍;比如在Android中要使用到的接口,抽象类,类型转换,继承,覆盖,匿名内部类,多线程,这些都是Java语言的,如果以前没有基础过,学Android会很郁闷的;当然如果你有C++基础,当然也可以基于NDK开发,可以不使用Java;
最近冒出来的kotlin是google官方支持的开发语言,但是靠真正流行还需要很长时间,个人推荐还是以java为主,但是kotlin尽量也要学习一下,多学一门语言怎么也是有好处的
对于没有java基础的同学我推荐一些资源:
Mars的Java4Android视频资源,可以在51cto中找到,很好的视频资源,适合初学者学习,我当初就是从这里开始了程序员这条不归路。
《Java从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发需要掌握的知识。
如果需要更多书籍资源文件的朋友请点击安卓书籍--从入门到精通
搭建Android开发环境
现在大部分开发人员都用的是Android Studio,从2014年底到现在,经过了三年时间的完善,AS已经成为了大部分Android程序员的开发神器,(笔者刚开始做Android就用的AS,没体会到什么,但是我发现用过AS的人都会深深的迷上它,而去放弃Eclipse了)
在这里面就不多说了大家可以去看看我对Studio的介绍:
Android Studio详解 AndroidStudio提高开发效率的插件
了解Android运行原理,一个工程的项目结构
有两种流行的结构:老的Ant& Eclipse ADT工程结构,和新的Gradle& Android Studio工程结构,你应该选择新的工程结构,如果你的工程还在使用老的结构,考虑放弃吧,将工程移植到新的结构。这里我们对两个项目结构做一下对比
老的结构:
old-structure
├─ assets
├─ libs
├─ res
├─ src
│└─ com/futurice/project
├─ AndroidManifest.xml
├─ build.gradle
├─ project.properties
└─ proguard-rules.pro
新的结构
new-structure
├─ library-foobar
├─ app
│├─ libs
│├─ src
││├─ androidTest
│││└─ java
│││└─ com/futurice/project
││└─ main
││├─ java
│││└─ com/futurice/project
││├─ res
││└─ AndroidManifest.xml
│├─ build.gradle
│└─ proguard-rules.pro
├─ build.gradle
└─ settings.gradle
主要的区别在于,新的结构明确的分开了'source sets'(main,androidTest),这是Gradle的一个理念。通过这个你可以做到,例如,添加源组‘paid’和‘free’在src中,让你的应用程序具有付费和免费的两种模式的源代码。
你的项目引用第三方项目库时(例如,library-foobar),拥有一个顶级包名app从第三方库项目区分你的应用程序是非常有用的。然后settings.gradle不断引用这些库项目,其中app/build.gradle可以引用。
如果需要更加详细的介绍请点击下方链接
介绍内容有 Android开发规范,架构,布局技巧,以及使用一些有助于快速开发相关工具等等
如何系统学习Android
因为要介绍的东西太多了,这里给大家推荐一张安卓知识体系的图片,最近看到别人整理的一份也挺好的,对我收益很大,如果需要请点击一个老鸟发的公司内部整理的 Android学习路线图
推荐一些实用的资源
推荐大家一个网站“极客导航——程序员自己的导航”,里面介绍了常用网站,工具大全,经典博客,进阶之路,源码下载,跳槽指南,精品网站,边角作用的一些常用网站,一些Android大牛的博客都在里面,我经常会看。
1.如果你是非科班毕业想要转行编程,看了我的经历你一定很有信心与动力,我能,你一样能,何况我中间走了这么多弯路; 2.如果你接触过一些数据结构、编程语言之类的,想要学习编程,你更应该有信心,你比那些非科班的人已经多了一些基础,你要做的只是坚定信念,坚持走下去; 3.不要感慨上天的不公平,我一路走来很悲催,走了太多的弯路,遇到了太多的困难,都是我这辈子难以忘记的,但同时我是幸运的,因为我有她,我感谢我女朋友无数个日夜的理解与支持,上帝在给你制造坎坷的时候总会对你有些眷顾; 4.如果你准备或已经在做开发的人员,没有信心或动力,又或是对未来迷茫的时候,姑且当做一篇励志小说来看,你要做的就是做好你当下在做的事,相信你的付出一定能有所收获;
建议
写到这里想要给点建议,那就以一个反例的身份给出事后的一些建议吧:
1.每天花1小时看书,难的不是1小时,难的在坚持; 2.英语对编程来说很重要,试着习惯英语阅读;(扇贝系列的软件) 3.数据结构和算法要学好,这算是对编程来说最重要的课了,以后不见得能用得上,但用的时候起码你有印象; 4.善于利用搜索引擎,从用Google做起,学会英文关键字搜索,有问题第一时间想到去搜索而不是去请教别人; 5.多去混GitHub,目前最流行的开源社区,多参与开源项目,慢慢试着读牛人们的代码,时机到的时候自己也可以为6.开源社区贡献力量,可以这样说在GitHub上认真混一年,比你在大学四年学的东西要多的多; 7.第一份工作很重要,因为你会受一些周围同事、公司氛围的影响。 8.最后一条是尽快找一个女朋友,因为你的工作使你接触到的女性会越来越少。
大家都有了以上相同的教程,但是人和人之间的区别在于:别人有颗更强大的内心,可怕的是比你聪明的人比你还要更努力!!
当你下定决心,准备前行的时候,剩下的只有坚持了。。。
最新Java教程全套
第1阶段:Java基础
1.认知基础课程2. java入门阶段3.面向对象编程4.飞机小项目5.面向对象和数组6.常用类7.异常机制8.容器和数据结构9. IO流技术10.多线程11.网络编程12.手写服务器13.注解和反射14. GOF23种设计模式15.正则表达式16. JDBC数据库操作17.手写SORM框架18. JAVA10新特性19.数据结构和算法20. JVM虚拟机讲解21. XML技术解析
第2阶段:数据库开发全套课程
1.Oracle和SQL语言2.Mysql快速使用3.PowerDesigner使用4.JDBC数据库5.Mysql优化6.oracle深度讲解
第3阶段:网页开发和设计
1.HTML基础2.CSS基础3.JavaScript编程4.jQuery5.easyUI
第4阶段:Servlet和JSP实战深入课程
1.Servlet入门和Tomcat2.request和response对象3.转发和重定向_Cookie4.session_Context对象5.JSP6.用户管理系统7.Ajax技术8.EL和JSTL标签库9.过滤器10.监听器
第5阶段:高级框架阶段
1.Mybatis2.Spring3.Spring MVC4.SSM框架整合5.RBAC权限控制项目6.Hibernate37.Hibernate48.jFinal9.Shiro安全框架10.Solr搜索框架11.Struts212.Nginx服务器13.Redis缓存技术14.JVM虚拟机优化15.Zookeeper
第6阶段:微服务架构阶段
1.Spring Boot2.Spring Data3.Spring Cloud
第7阶段:互联网架构阶段
1.Linux系统2.Maven技术3.Git4.SVN5.高并发编程6.系统和虚拟机调优7.JAVA编程规范8.高级网络编程9.Netty框架10.ActiveMQ消息中间件11.单点登录SSO12.数据库和SQL优化13.数据库集群和高并发14.Dubbo15.Redis16.VSFTPD+NGINX
第8阶段:分布式亿级高并发电商项目
1.基于SOA架构介绍2.VSFTPD和Nginx和商品新增3.商品规格参数管理4.Jsonp5.CMS模块6.广告位数据缓存7.SolrJ和SolrCloud8.商品搜索9.商品详情10.单点登录11.购物车12.订单系统13.分库和分表14.分布式部署
第9阶段:毕设项目第1季
1.电子政务网2.企业合同管理系统3.健康管理系统4.商品供应管理系统5.土地档案管理系统6.聊天室设计和实现7.码头配套和货柜管理系统8.百货中心供应链系统9.病历管理系统10.超市积分管理系统11.动漫论坛12.俄罗斯方块13.个人博客系统14.固定资产管理系统15.影视创作论坛16.屏幕截图工具17.超级玛丽游戏18.飞机大战游戏19.雷电
第10阶段:毕设项目第2季
1.微博系统2.写字板3.坦克大战4.推箱子5.电脑彩票系统6.记账管理系统7.新闻发布系统8.医院挂号系统9.仓库管理系统10.停车场管理系统11.网络爬虫12.酒店管理系统13.企业财务管理系统14.车辆管理系统15.员工信息管理系统16.旅游网站17.搜索引擎18.进销存管理系统19.在线考试系统20.物流信息网21.住院管理系统22.银行柜员业务绩效系统
OK,本文到此结束,希望对大家有所帮助。