100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > android自定义SurfaceView实现跑男动画

android自定义SurfaceView实现跑男动画

时间:2024-03-24 01:02:53

相关推荐

android自定义SurfaceView实现跑男动画

先看效果:

代码实现:

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.graphics.Rect;import android.util.AttributeSet;import android.view.SurfaceHolder;import android.view.SurfaceView;/*** 奔跑的小人* * @author shaoshuai* */public class RunManView extends SurfaceView {private SurfaceHolder holder;/** 画布 */private Canvas mCanvas;/** 画笔 */private Paint mPaint;/** 视图宽度 */private int mWidth;/** 视图高度 */private int mHeight;/** 背景 */private Bitmap mBg1;/** 奔跑的小人 */private Bitmap mPlay1;/** 每一帧的动画时间 */private int Time = 50;/** 当前图片的动画帧 */private int mPicPosition = 0;// 动画共10帧,开始为0/** 执行动作 */private Runnable runnable = new Runnable() {@Overridepublic void run() {myDraw();}};public RunManView(Context context, AttributeSet attrs) {super(context, attrs);holder = this.getHolder();holder.addCallback(callBack);mPaint = new Paint();mPaint.setColor(Color.YELLOW);BitmapFactory.Options ops = new BitmapFactory.Options();mBg1 = BitmapFactory.decodeResource(this.getResources(), R.drawable.bg1, ops);mPlay1 = BitmapFactory.decodeResource(getResources(), R.drawable.dartman, ops);}SurfaceHolder.Callback callBack = new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {// 获取屏幕宽高mWidth = width;mHeight = height;// mRect = new Rect(0, 0, mWidth, mHeight);new Thread(runnable).start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}};private void myDraw() {int toLeft = 300;// 距离左侧宽度int toTop = mHeight - 100;// 距离顶部高度if (toLeft > mWidth) {toLeft = 0;}while (true) {try {Rect mClipRect = new Rect(toLeft, toTop, toLeft + mPlay1.getWidth() / 10, toTop - mPlay1.getHeight());mCanvas = holder.lockCanvas();if (mCanvas != null) {// 画背景mCanvas.drawBitmap(mBg1, null, new Rect(0, 0, mWidth, mHeight), mPaint);mCanvas.save();// 保存当前状态mCanvas.clipRect(mClipRect);// 裁剪区域// 画小人mCanvas.drawBitmap(mPlay1, toLeft - mPicPosition * mPlay1.getWidth() / 10,toTop - mPlay1.getHeight(), mPaint);mCanvas.restore();// 取出保存状态mPicPosition++;// 步子加1// 无限循环跑动if (mPicPosition > 9) {mPicPosition = 0;}}} catch (Exception e) {e.printStackTrace();} finally {if (mCanvas != null) {holder.unlockCanvasAndPost(mCanvas);}}try {Thread.sleep(Time);} catch (InterruptedException e) {e.printStackTrace();}}}}

相应的资源文件:

dartman.png

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。