当前位置:  编程技术>移动开发
本页文章导读:
    ▪实例9-小弟我的map        实例9---我的地图   实例9,在j2me中是使用了图层管理和地图图层,在android并没有这些,所以我用android的只是写了用于 android的图层管理器和地图图层,不过有些东西还没有实现,只实现了一.........
    ▪ 【6.8】Service的1点理解        【6.8】Service的一点理解 与Activity不同,Service 自启动,运行在后台,不能与用户交互,退出应用时,Service还能运行。如MP3播放   Service的生命周期:onCreate -> onStart -> onDestroy (其中Service.........
    ▪ popwindow卡通显示消失,activity切换动画       popwindow动画显示消失,activity切换动画 popwindow通过setAnimationStyle(int animationStyle)函数来设置动画效果 android:windowEnterAnimation表示进入窗口动画 android:windowExitAnimation表示窗口退出动画 在res/values.........

[1]实例9-小弟我的map
    来源: 互联网  发布时间: 2014-02-18
实例9---我的地图

  实例9,在j2me中是使用了图层管理和地图图层,在android并没有这些,所以我用android的只是写了用于 android的图层管理器和地图图层,不过有些东西还没有实现,只实现了一些这个例子会用到的,还有setViewWindow的实现并没有完整,算法上可能会有些问题,虽然我没有测试出,如果有谁测试出来了,请告诉我,我会改正。

 下面给出这个例子的效果图和MainView的代码。




 package com.wjh.demon_8;

import com.wjh.midp_me.AndroidLayerManager;
import com.wjh.midp_me.AndroidSprite;
import com.wjh.midp_me.AndroidTiledLayer;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
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;
	Thread gameThread = null;
	boolean isGame = true;
	SurfaceHolder holder = null;
	
	Paint backPaint = null;
	Paint forePaint = null;
	//具体游戏相关
	
	public AndroidTiledLayer m_TLayer;				//管理场景
	public int m_aCells[][] =              //存储m_TLayer中各cell的取值
		   {{	2,	2,	3,	2,	2,	2,	2,	2 ,2,	2,	3,	2,	2,	2,	2,	2 },
			{   2,	3,	2,	4,	3,	4,	3,	2 ,2,	2,	3,	2,	2,	2,	2,	2},
			{   2,	3,	3,	3,	4,	2,	4,	2 ,2,	2,	3,	2,	2,	2,	2,	2 },
			{   2,	3,	2,	3,	3,	4,	1,	2 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	2,	4,	3,	3,	3,	3,	4,	2 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	2,	3,	2,	3,	3,	4,	3,	2 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	2,	3,	3,	4,	1,	3,	3,	2 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	4,	2,	2,	4,	2,	2,	4,	4 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	4,	2,	2,	4,	2,	2,	4,	4 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	4,	2,	2,	4,	2,	2,	4,	4 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	4,	2,	2,	4,	2,	2,	4,	4 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	4,	2,	2,	4,	2,	2,	4,	4 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	4,	2,	2,	4,	2,	2,	4,	4 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	4,	2,	2,	4,	2,	2,	4,	4 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	4,	2,	2,	4,	2,	2,	4,	4 ,2,	2,	3,	2,	2,	2,	2,	2},
			{	4,	2,	2,	4,	2,	2,	4,	4 ,2,	2,	3,	2,	2,	2,	2,	2}};
	public AndroidLayerManager m_Manager;			//图层管理器,管理各个图层
	public int m_nX = 0;					//显示区域左上角的横坐标
	public int m_nY = 0;   				//显示区域左上角的纵坐标
	public MainView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		setFocusable(true);
		getHolder().addCallback(this);
		holder = this.getHolder();
		
		backPaint = new Paint();
		backPaint.setColor(Color.BLACK);
		
		forePaint = new Paint();
		//具体游戏相关
		Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.map);
		//创建TiledLayer场景
		m_TLayer = new AndroidTiledLayer( 16, 16, image, 32, 32 ); 
		//设置场景的位置
		m_TLayer.setPosition( 0, 0 );
		
		LoadMap();				
		
		//将各个图层添入m_Manager
		m_Manager = new AndroidLayerManager();
		
		m_Manager.append(m_TLayer);
		//设置m_Manager的显示区域
		m_Manager.setViewWindow( m_nX, m_nY, getWidth(), getHeight() );
	}
	public void LoadMap(){
		//设置m_TLayer中各cell的值
		for( int row = 0; row < 16; row ++ ){
			for( int col = 0; col < 16; col ++ ){
				m_TLayer.setCell( row, col, m_aCells[row][col] );
			}
		}
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		long startTime = System.currentTimeMillis();
		while(isGame)
		{
			input();
			logic();
			doDraw();
			try {
			long endTime = System.currentTimeMillis();
			long sleepTime = endTime - startTime;
				if(sleepTime<100)
				{
					Thread.sleep(sleepTime);
				}
				
			} 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()
	{
		switch(this.keyCode)
		{
		case KeyEvent.KEYCODE_DPAD_UP:
			m_nY -= 5;
			break;
		case KeyEvent.KEYCODE_DPAD_DOWN:
			m_nY += 5;
			break;
		case KeyEvent.KEYCODE_DPAD_LEFT:
			m_nX -= 5;
			break;
		case KeyEvent.KEYCODE_DPAD_RIGHT:
			m_nX += 5;
			break;
		}
		m_Manager.setViewWindow(m_nX, m_nY, getWidth(), getHeight());
		this.keyCode = 0;
	}
	//逻辑判断
	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)
	{
		//用黑色清屏
		canvas.drawRect(0, 0, getWidth(), getHeight(), forePaint);
		
		//从屏幕的(0,0)点开始显示图像
		m_Manager.paint(canvas, forePaint);
	}
	@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();
		
	}
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		this.keyCode = keyCode;
		return true;
	}


	

	
}
 

apk文件(将后缀改为apk):Demon_8.zip

源代码文件:Demon_8.rar


    
[2] 【6.8】Service的1点理解
    来源: 互联网  发布时间: 2014-02-18
【6.8】Service的一点理解

与Activity不同,Service 自启动,运行在后台,不能与用户交互,退出应用时,Service还能运行。如MP3播放

 

Service的生命周期:onCreate -> onStart -> onDestroy (其中Service在onDestroy之前,onCreate只执行一次,onStart可以执行多次)

 

步骤:

 

1)创建一个Service类继承自Service,其中有onCreate(),onStart(Intent intent, int startId),onDestroy(),onBind()四个方法可以重写,其中onBind()一定要重写

 

2)在AndroidManifest.xml中注册Service,其中android:name要和创建的Service完全一致

 

3)开始服务:startService(intent);结束服务:stopService(intent)

 

 

绑定Service和Activity

 

假如没有结束服务的话,Service会一直运行直至关机,所以绑定可以使Activity在onStop时同时销毁Service

 

绑定的Service的生命周期:onCreate -> onBind -> onUnbind -> ondestroy

 

 

在MyService类中定义了一个MyBinder类,该类实际上是为了获得MyService的对象实例的。在ServiceConnection接口onServiceConnected方法中的第2个参数是一个IBinder类型的变量,将该参数转换成MyService.MyBinder对象,并使用MyBinder类中的getService方法获得MyService对象。在获得MyService对象后,就可以在Activity中随意操作MyService类了

 

 

注意事项

 

1)两者请不要混用,否则容易出现Service没被Destroy的情况。

 

如startService后再bindService,此时退出Activity之后unbindService,不会destroy

 

2)确保有bindService就有unBindService(绑定的会在退出时自动unbind),有startService就有stopService


    
[3] popwindow卡通显示消失,activity切换动画
    来源: 互联网  发布时间: 2014-02-18
popwindow动画显示消失,activity切换动画


popwindow通过setAnimationStyle(int animationStyle)函数来设置动画效果

android:windowEnterAnimation表示进入窗口动画

android:windowExitAnimation表示窗口退出动画


在res/values/style.xml代码:


<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="PopupAnimation" parent="android:Animation" mce_bogus="1">
<item name="android:windowEnterAnimation">@anim/popup_enter</item>
<item name="android:windowExitAnimation">@anim/popup_exit</item>
</style>
</resources> 

在res/anim/popup_enter.xml声明所需进入动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="0.6" android:toXScale="1.0"
android:fromYScale="0.6" android:toYScale="1.0" android:pivotX="50%"
android:pivotY="50%" android:duration="1000" />
<alpha android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="1000" />
</set>

在res/anim/popup_exit.xml声明所需退出动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="1.0" android:toXScale="0.5"
android:fromYScale="1.0" android:toYScale="0.5" android:pivotX="50%"
android:pivotY="50%" android:duration="500" />
<alpha android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
</set>

设置popwindow的位置及动画

        popupWindow.setAnimationStyle(R.style.PopupAnimation);
        popupWindow.showAtLocation(findViewById(R.id.parent), Gravity.CENTER
                | Gravity.CENTER, 0, 0);
        popupWindow.update();

调用popupWindow.dismiss();语句。popwindow消失,自动调用消失动画popup_exit.xml


activity切换动画

public void onClick(View v) {
                Intent intent = new Intent(ActivityAnim.this,ActivityTwo.class);
                startActivity(intent);                
                overridePendingTransition(R.anim.act_enter,R.anim.act_exit);                
  }


overridePendingTransition(int ,int)函数,第一个参数为activity显示动画,第二个参数为退出动画,两个动画的xml文件存放在anim文件夹下

或者:getWindow().setWindowAnimations(R.style.window_animation);

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android消息处理机制Looper和Handler详解 iis7站长之家
▪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的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


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

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

浙ICP备11055608号-3