Android实现人物在地图中移动

Mars.CN 2011-11-19 05:17:44
加精
初学Android,做了个例子和初学的人们分享,高手指点

代码包已经上传到我的下载资源中 http://download.csdn.net/detail/suolong123/3815059




package com.marssoft.graphicstest;


import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Bitmap.Config;
import android.graphics.drawable.BitmapDrawable;
import android.view.KeyEvent;
import android.view.View;

public class TestView extends View {
public static final short DIRECTION_UP = 19;
public static final short DIRECTION_DOWN = 20;
public static final short DIRECTION_LEFT = 21;
public static final short DIRECTION_RIGHT = 22;

private int width;
private int height;
private Activity act = null;
private Bitmap map = null;
private Bitmap z[] = new Bitmap[2];
private Bitmap rm[][] = new Bitmap[4][4];
private Paint mPaint = new Paint();
private Bitmap mzip = null;
private int rx=0 , ry=0;

private int moveDirection =0; //移动方向
private int dirction=DIRECTION_DOWN; //目前面向
private int move_p=0; //移动动画

public TestView(Context context) {
super(context);

act = (Activity)context;
width = act.getWindowManager().getDefaultDisplay().getWidth();
height = act.getWindowManager().getDefaultDisplay().getHeight();
z[0] = new BitmapDrawable(this.getContext().getResources().openRawResource(R.drawable.m0)).getBitmap();
z[1] = new BitmapDrawable(this.getContext().getResources().openRawResource(R.drawable.m0)).getBitmap();

// HandlerThread thread = new HandlerThread("chonghua");
// thread.start();
// Repaint r = new Repaint(thread.getLooper());

new Thread(new Repaint()).start();
createImage();
setFocusable(true); //设置控制焦点
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//键盘按下
System.out.println("按键操作:" + keyCode);
moveDirection = keyCode;
dirction = keyCode;
return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
moveDirection=0;
move_p=0;
return super.onKeyUp(keyCode, event);
}


/**
* 创建一张地图。
*/
public void createImage(){
map = Bitmap.createBitmap(width, height, Config.ARGB_8888); //创建于屏幕大小一致的图片
Canvas canvas = new Canvas(map); //获得画图对象
canvas.drawColor(Color.WHITE); //设置背景色为白色
int r = height/32;
int c = width/32;
Paint p = new Paint();
for(short i=0 ; i<r ; i++){
for(short f=0 ; f<c ; f++){
canvas.drawBitmap(z[0], f*32, i*32, p);
}
}
mzip = new BitmapDrawable(this.getContext().getResources().openRawResource(R.drawable.r01)).getBitmap(); //获得人物
//分解人物动作
System.out.println("开始切图");
for(short i=0 ; i<4 ; i++){
for(short f=0 ; f<4 ; f++){
rm[i][f] = Bitmap.createBitmap(mzip, f*32, i*48, 32, 48);
}
}
}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
if(map !=null){
canvas.drawBitmap(map, 0,0, mPaint);
short sd = 0;
if(dirction == DIRECTION_UP){
sd=3;
}else if(dirction == DIRECTION_LEFT){
sd=1;
}else if(dirction == DIRECTION_RIGHT){
sd=2;
}else if(dirction == DIRECTION_DOWN){
sd=0;
}
canvas.drawBitmap(rm[sd][move_p], rx,ry, mPaint);
}
System.out.println("据说调用到了onDraw函数");
}

/**
* 移动小人。
* @param direction 方向
*/
public void move(int direction){

}


private class Repaint implements Runnable{

public void run() {
while(true){
if(moveDirection == DIRECTION_UP){
ry-=5;
}else if(moveDirection == DIRECTION_DOWN){
ry+=5;
}else if(moveDirection == DIRECTION_LEFT){
rx-=5;
}else if(moveDirection == DIRECTION_RIGHT){
rx+=5;
}
System.out.println(rx + "-" + ry);
if(moveDirection !=0){
move_p++;
if(move_p == 4){
move_p=0;
}
}
//刷新
postInvalidate();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}




...全文
8102 134 打赏 收藏 转发到动态 举报
写回复
用AI写文章
134 条回复
切换为时间正序
请发表友善的回复…
发表回复
androidshu 2014-08-04
  • 打赏
  • 举报
回复
恩恩,很酷,之前我也做过一个类似的
Slough1014 2014-08-04
  • 打赏
  • 举报
回复
人物怎么动不了啊
Gemerl 2014-07-03
  • 打赏
  • 举报
回复
楼主很强大...
puke3615 2014-05-19
  • 打赏
  • 举报
回复
下载下来看看吧
  • 打赏
  • 举报
回复
这东西都有人赞~~canvas都没有进行锁定 也没有进行脏矩阵的锁定 完全就是J2ME的东西。。顶下30楼
aprillinehxy 2014-03-12
  • 打赏
  • 举报
回复
支持,顶哦
zhaowin88 2014-03-07
  • 打赏
  • 举报
回复
支持!正在使用。
Adam幸福 2014-02-28
  • 打赏
  • 举报
回复
谢谢分享
TuskueNeko 2013-12-16
  • 打赏
  • 举报
回复
太贵下不起 啊
寻找IT之路 2013-10-13
  • 打赏
  • 举报
回复
回去研究一下
2在路上 2013-10-12
  • 打赏
  • 举报
回复
挺好的。。。
  • 打赏
  • 举报
回复
楼主很牛啊。。。这个东西要我做应该不会这样写吧
yushiqi_sxu 2013-07-15
  • 打赏
  • 举报
回复
赞!!!!!!
lineco 2013-03-14
  • 打赏
  • 举报
回复
楼主你不厚道啊 、这么高的分数
该死的刀 2013-01-23
  • 打赏
  • 举报
回复
怎么感觉跟做广告一样......
zsjerry 2013-01-11
  • 打赏
  • 举报
回复
谢谢分享,留用!
wujian19880117 2013-01-07
  • 打赏
  • 举报
回复
斜线的移动怎么算
Where_You 2012-12-26
  • 打赏
  • 举报
回复
实在是看不懂啊
Code_AK47 2012-12-06
  • 打赏
  • 举报
回复
3分啊!好贵啊!没分啊!
lixiaofei0218 2012-11-02
  • 打赏
  • 举报
回复
谢谢,分享!
加载更多回复(69)
这是个神奇的东西哦 投篮辅助器 让投篮更准 锋?三分不是问题 百分百!! 【招】应届生,入职年薪5-10万 【有奖】嵌入式开发从业人员大调查 SAP D-Code大会最低折扣倒计时 2013年热门Android应用 Android 游戏教程:让人物动起来 跟燕青一起学Android应用开发 .. 相关资源 AgileEAS.NET SOA 平台简易教程 50个Div+CSS模板 圣诞程序雪花飞舞的世界(VC++) C#5.0语法范例 读懂C++递归程序 c++ 类 的初步讨论 云计算资料大全(了解云计算者必读).pdf 云计算术语大全.docx Eclipse快捷键大全 五种令人印象深刻的网页头部设计技巧 C++初步知识(2013级-C++程序设计) 拼图游戏代码 碎纸片的拼接复原算法集合 java笔试题大集合及答案 热门招聘 【上海斐讯数据】招聘JAVA工程师 【德邦物流】高薪诚聘 软件质量工程师 【移动】车联网产业研究员 【移动】核心网或承载接入网 【移动】行业市场研究员 【移动】互联网运营经理 【移动】服务器技术研究员 【移动】产品体验设计师 JAVA软件开发工程师 月薪15000 C++/C# 软件开发工程师 月薪15000 技术总监- 武汉 月薪30000 android 开发工程师 月薪20000 高级算法工程师 月薪30000 地图导航上市公司 产品经理 月薪20000 【上海斐讯数据】招聘JAVA工程师 【德邦物流】高薪诚聘 软件质量工程师 【移动】车联网产业研究员 【移动】核心网或承载接入网 【移动】行业市场研究员 【移动】互联网运营经理 【移动】服务器技术研究员 【移动】产品体验设计师 JAVA软件开发工程师 月薪15000 C++/C# 软件开发工程师 月薪15000 技术总监- 武汉 月薪30000 android 开发工程师 月薪20000 高级算法工程师 月薪30000 地图导航上市公司 产品经理 月薪20000 电信下载网通下载 VIP免积分下载 你目前积分:0,下载后评论将有机会获得返分。 . FAQ为什么我点的下载下不了,但积分却被扣了由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。我的积分不多了,如何获取积分?上传优质资源可以获取积分,详细见 积分规则。 选择完成有奖的任务,可以获取积分。 http://task.csdn.net 选择购买VIP会员服务,无需积分下载资源 。 http://vip.csdn.net 评价资源返积分: 立即评价 第一次绑定手机,将获50下载积分及100论坛可用分。 立即绑定 论坛可用分兑换下载积分。 立即兑换 下载资源意味着您已经同意遵守以下协议1. 资源的所有权益归上传用户所有2. 未经权益所有人同意,不得将资源的内容挪作商业或盈利用途3. CSDN下载频道仅提供交流平台,并不能对任何下载资源负责4. 下载资源如有侵权或不适当内容,请与我们联系。5. 本站不保证本站提供的资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。 下载频道公告. 做任务,得下载分 微软必应-英雄会在线编程 欢迎订阅CSDN社区周刊 . 本周热点资源. android4高级编程(文) C#开发Android应用实战 使用Mono for Android和.NET C# PDF扫描版 仿新版360安全卫士主界面(基于稍作修改的duilib) C/C++指针经典资料大全 Android动画效果集合开源APP JAVA面试题目 Excel导入导出测试程序,测试通过 Unity 4.x从入门到精通 官方教材 完整版地址.rar 站群工具结合包 C#高性能大容量SOCKET并发完成端口例子 . 课程资源热门Tag. 软件测试 matlab loadrunner 测试 软件工程 qtp 教程 破解 性能测试 软件 .. . 关闭 积分不够,先来了解

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧