当前位置:  编程技术>移动开发
本页文章导读:
    ▪ViewStub的应用        ViewStub的使用 为了使用ViewStub,你所有需要做的是指定android:id特性,便于以后inflate,指定android:layout特性,引用布局文件。ViewStub还允许你使用第三个特性,android:inflatedId,你可以使用它.........
    ▪ 标记一个bug.        标记一个bug...   今天一个朋友有个bug没能解决,让我帮他看一下,具体信息是: 2011-05-30 13:43:28.494 localShowImg[2305:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0.........
    ▪ 范例3-使用surfaceView       实例3--使用surfaceView  在那本书用的是GameCanvas,我就用surfaceView实现了和实例2相同的效果 效果图: 下面给出MainView 的代码 package com.wjh.demon_3; import android.content.Context; import android.graphics.Canvas.........

[1]ViewStub的应用
    来源: 互联网  发布时间: 2014-02-18
ViewStub的使用
为了使用ViewStub,你所有需要做的是指定android:id特性,便于以后inflate,指定android:layout特性,引用布局文件。ViewStub还允许你使用第三个特性,android:inflatedId,你可以使用它来重写包含的布局文件中的根元素的id。最后,在ViewStub上设定的layout_*参数将会应用到包含的布局文件的顶部。这里有个例子:

<ViewStub
  android:id="@+id/stub_import"
  android:inflatedId="@+id/panel_import"
  android:layout="@layout/progress_overlay"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="bottom" />
当你准备inflate ViewStub时,调用inflate()方法即可。你还可以设定ViewStub的Visibility为VISIBLE或INVISIBLE,也会触发inflate。注意的是,使用inflate()方法能返回布局文件的根View:

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
有一点需要记住的是:当ViewStub inflate后,这个ViewStub就从View层次中移除了。因此,没有必要保留一个对ViewStub的引用(如在类的字段里)。

ViewStub是快捷编程与高效编程之间的产物。与其手动的inflate View并在运行时添加到View层次上,不如简单的使用ViewStub。它相当“廉价”且易于使用。ViewStub唯一的缺点是现在不支持<merge />标签。


    
[2] 标记一个bug.
    来源: 互联网  发布时间: 2014-02-18
标记一个bug...

  今天一个朋友有个bug没能解决,让我帮他看一下,具体信息是:

2011-05-30 13:43:28.494 localShowImg[2305:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0x4d031a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.'
*** Call stack at first throw:
(
	0   CoreFoundation                      0x00da7be9 __exceptionPreprocess + 185
	1   libobjc.A.dylib                     0x00efc5c2 objc_exception_throw + 47
	2   CoreFoundation                      0x00da7b21 -[NSException raise] + 17
	3   Foundation                          0x007796cf _NSSetUsingKeyValueSetter + 135
	4   Foundation                          0x0077963d -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
	5   UIKit                               0x002098d6 -[UIRuntimeOutletConnection connect] + 112
	6   CoreFoundation                      0x00d1e2cf -[NSArray makeObjectsPerformSelector:] + 239
	7   UIKit                               0x002082ed -[UINib instantiateWithOwner:options:] + 1041
	8   UIKit                               0x0020a081 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
	9   UIKit                               0x00014943 -[UIApplication _loadMainNibFile] + 172
	10  UIKit                               0x000154ca -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291
	11  UIKit                               0x0001fdb2 -[UIApplication handleEvent:withNewEvent:] + 1533
	12  UIKit                               0x00018202 -[UIApplication sendEvent:] + 71
	13  UIKit                               0x0001d732 _UIApplicationHandleEvent + 7576
	14  GraphicsServices                    0x0101ca36 PurpleEventCallback + 1550
	15  CoreFoundation                      0x00d89064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
	16  CoreFoundation                      0x00ce96f7 __CFRunLoopDoSource1 + 215
	17  CoreFoundation                      0x00ce6983 __CFRunLoopRun + 979
	18  CoreFoundation                      0x00ce6240 CFRunLoopRunSpecific + 208
	19  CoreFoundation                      0x00ce6161 CFRunLoopRunInMode + 97
	20  UIKit                               0x00014fa8 -[UIApplication _run] + 636
	21  UIKit                               0x0002142e UIApplicationMain + 1160
	22  localShowImg                        0x000021e9 main + 121
	23  localShowImg                        0x00002165 start + 53
)
terminate called after throwing an instance of 'NSException'
Program received signal:  “SIGABRT”.

   我估计是xib里面有问题,就问他是否某个IBOutlet没连线,他回答说没有,因为是QQ联系,不能现场看具体情况,我让他打包发邮箱,我打开来看,确实是这个错误,确实xib没啥问题,即使把其他地方注释掉,只留下面这句也还是报错...

[self.window makeKeyAndVisible]; 

  我就怀疑是不是配置有问题,果然...在info.plist文件里面Main nib file base name居然填的不是MainWindow,汗,居然有这种失误.

  当我准备给他QQ上说的时候,发现他离线了,留了句:"我重装工具了...果断点",汗,蝈蝈无语了...

  后来他重装没装起,也算万幸,毕竟新手,路还很长,谨以此文,共勉之

 

 

 


    
[3] 范例3-使用surfaceView
    来源: 互联网  发布时间: 2014-02-18
实例3--使用surfaceView

 在那本书用的是GameCanvas,我就用surfaceView实现了和实例2相同的效果

效果图:




下面给出MainView 的代码

package com.wjh.demon_3;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;

public class MainView extends SurfaceView implements Callback,Runnable{
	int keyCode = 0;
	String keyAction = "";
	Thread gameThread = null;
	boolean isGame = true;
	SurfaceHolder holder = null;
	public MainView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		setFocusable(true);
		getHolder().addCallback(this);
		holder = this.getHolder();
		
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(isGame)
		{
			input();
			logic();
			doDraw();
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}
		
	}
	//开始游戏主线程
	public void start()
	{
		if(gameThread == null)
		{
		gameThread = new Thread(this);
		gameThread.start();
		}
	}
	//停止游戏主线程
	public void stop()
	{
		isGame = false;
		if(gameThread != null)
		{
			try {
				gameThread.join();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	//输入判断
	public void input()
	{
		
	}
	//逻辑判断
	public void logic()
	{
		
	}
	public void doDraw()
	{
		Canvas c = null;
		try
		{
		c = holder.lockCanvas();
		synchronized (holder) {
			paint(c);
		}
		}finally{
			if(c != null)
			{
			holder.unlockCanvasAndPost(c);
			}
		}
	}
	//画图
	public void paint(Canvas canvas)
	{
		Paint backGround = new Paint();
		backGround.setColor(Color.BLACK);
		//清屏
		canvas.drawRect(0, 0, getWidth(), getHeight(), backGround);
		//设置画笔颜色
		Paint cPaint = new Paint();
		cPaint.setColor(Color.BLUE);
		cPaint.setTextSize(20);
		//输出按键的设备码
		canvas.drawText("KeyCode:", 10, 20,cPaint);
		canvas.drawText(""+keyCode,120,20,cPaint);
		//输出按键的设备名
		canvas.drawText("KeyAction:", 10, 80, cPaint);
		canvas.drawText(keyAction, 120, 80, cPaint);
	}
	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		start();
		
	}
	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		stop();
		
	}
	
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		this.keyCode = keyCode;
		switch(keyCode)
		{
		case KeyEvent.KEYCODE_DPAD_UP:
			this.keyAction = "UP";
			break;
		case KeyEvent.KEYCODE_DPAD_DOWN:
			this.keyAction = "DOWN";
			break;
		case KeyEvent.KEYCODE_DPAD_LEFT:
			this.keyAction = "LEFT";
			break;
		case KeyEvent.KEYCODE_DPAD_RIGHT:
			this.keyAction = "RIGHT";
			break;
		case KeyEvent.KEYCODE_DPAD_CENTER:
			this.keyAction = "CENTER";
			break;		
		default:
			this.keyAction="/blog_article/NONE/index.html";
			break;
		}
		return super.onKeyDown(keyCode, event);
	}

}

apk包(将后缀改为apk):Demon_3.zip

 源文件包:Demon_3.rar

1 楼 zhang247124629 2011-05-31  
surfaceDestroyed方法中没有必要调用stop().因为来电时.系统会调用surfaceDestroyed(),当结束通话后.系统会重新调用surfaceCreate()方法的.所以没有必要把线程给终止.
2 楼 一口三个汉堡 2011-05-31  
zhang247124629 写道
surfaceDestroyed方法中没有必要调用stop().因为来电时.系统会调用surfaceDestroyed(),当结束通话后.系统会重新调用surfaceCreate()方法的.所以没有必要把线程给终止.

我只是想让整个程序看起来有始有终,或许看起来多余。呵呵

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
编程语言 iis7站长之家
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3