读书人

Android实现人物在地图中移动,该怎么解

发布时间: 2012-02-11 09:51:35 作者: rapoo

Android实现人物在地图中移动
初学Android,做了个例子和初学的人们分享,高手指点

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



Java code
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();                }            }        }    }} 






[解决办法]
3资源分好贵哇 不过还是支持一下
[解决办法]
有时间研究一下。
[解决办法]
支持下
[解决办法]
谢谢分享
[解决办法]
看不懂啊啊啊啊
[解决办法]
支持一下
[解决办法]
3资源分好贵哇 不过还是支持一下
[解决办法]
这个不清楚。帮你顶起。
[解决办法]
呵呵,不错
[解决办法]
看看呢
[解决办法]
恭喜楼主啊,呵呵
[解决办法]
学以致用 不错啊
[解决办法]
貌似确实太贵了点。
[解决办法]
下一个看看怎么样啊!
[解决办法]
先收藏了,有空再学习学习
[解决办法]
在学习呢 谢谢分享
[解决办法]
支持,这个好
[解决办法]
好东西就是贵啊
[解决办法]
hao 不错 啊 谢谢啦

[解决办法]
这都推荐了?CSDN的android版真的有点。。。。。。

读书人网 >Android

热点推荐