有关SurfaceView我们将通过三个系统自带的例子来深入掌握Android绘图必会的SurfaceView,今天我们以SDK中的Sample游戏lunarlander中的LunarView具体实现,Android123建议大家导入该游戏工程到你的Eclipse然后自己编译先玩一下这个游戏,然后再看代码比较好理解。 class LunarView extends SurfaceView implements SurfaceHolder.Callback { class LunarThread extends Thread { /* * Difficulty setting constants */ public static final int DIFFICULTY_EASY = 0; public static final int DIFFICULTY_HARD = 1; public static final int DIFFICULTY_MEDIUM = 2; /* * Physics constants */ public static final int PHYS_DOWN_ACCEL_SEC = 35; public static […]
the

APK签名导出向导 – Use the Export Wizard Android开发技术
以前我们介绍过试用Android签名用keytool和jarsigner制作apk文件 的方法来对一个APK文件进行签名,今天我们主要讲解下如何通过Android 1.5 SDK以后ADT 0.9.1版自带的Use the Export Wizard。首先我们在Package Explorer中选择工程的androidmanifest.xml文件,可以看到右边默认的manifest模式中有个exporting功能,选择Use the Export Wizard,如图所示: 第二步在Project Checks中,选择需要导出的工程, 一般默认的是当前工程,这里我们使用默认的android123即可,如下图: 接下来在Keystore selection中选择Create new keystore这项,默认的Location为keystore文件的保存位置,这里我们随便选择一个路径即可,然后输入密码和确认密码,这里可以随便填写,如图: 在Key Creation这项中,我们简单输入一些信息,比如Alias别名,这里我就写自己的名字CWJ, 密码要和刚才keystore中输入的一样才行,整个签名过程其实是一个RSA加密过程,最后的Validity(years)是有效期,这里输入推荐的25年即可,其他的内容为选填,如图 最后在Destination and Key/certificate checks中选择只有Destination APK file,这是保存的最终APK文件的路径,最后签名后的apk文件就保存到这个位置中,同时下面有一些描述信息,如图:
Only the original thread that created a view hierarchy can touch its views的相关 Android开发技术
很多网友在Android中使用多线程处理UI相关内容时可能会发现Logcat提示Only the original thread that created a view hierarchy can touch its views这样的错误,这主要是Android的相关View和控件不是线程安全的,我们必须做独立的处理这点比J2ME麻烦一些,这里Android给我们提供了很多方法,有关线程的,我们需要了解下J2ME中一些传统的线程创建方法,比如Runnable或直接new Thread(),大家需要了解UI线程、worker线程以及一些概念。今天android开发网说一种简单的方法除了异步任务AsyncTask外使用Handler可以很好的处理,和Win32的消息很像。 首先我们需要明白,主线程或者这里说的原始线程original thread 一般情况下是UI线程,当然UI线程并不一定是主线程,我们不能长时间的阻塞该应用,在Android平台上可能会产生类似Force close或Wait这样的对话框这里我们成为ANR,这里除了使用ProgressDialog方式给用一个动态的进度代表当前处理并没有中断可能需要一些时间,所以android123告诉大家相关的网络处理可以使用工作者线程,但是worker 线程不能处理显示元素即UI相关的View或Widget包中的高层的控件,所以通过一个Handler对象可以很好的传递Runnable或Message ,下面我们用一个简单的例子来描述 final Handler cwjHandler = new Handler(); final Runnable mUpdateResults = new Runnable() { public void run() { updateUI(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); NetworkOperation();//一个很费时间的I/O操作,比如网络或文件读写等等。 } […]

