android一连串图片组成动画
2016-03-21 23:26
417 查看
/** * Created by Bellion on 2016/3/21. */ public class PersonRunSurface extends SurfaceView implements SurfaceHolder.Callback { private static final String TAG = "PersonGoSurface"; private Context mContext; private SurfaceHolder mHolder; private int widthPixels; private String[] runs; public PersonRunSurface(Context context) { super(context); init(context); } public PersonRunSurface(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public PersonRunSurface(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context) { this.mContext = context; //1 获取Holder mHolder = getHolder(); //2.添加回调 mHolder.addCallback(this); //3获取屏幕宽高 以及资源文件 WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(metrics); widthPixels = metrics.widthPixels; int heightPixels = metrics.heightPixels; Log.i(TAG, "widthPixels:" + widthPixels + "heightPixels:" + heightPixels); try { runs = context.getAssets().list("run"); } catch (IOException e) { e.printStackTrace(); } } //重写的SurfaceHolder.Callback的方法 @Override public void surfaceCreated(SurfaceHolder holder) { thread.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } Thread thread = new Thread(){ @Override public void run() { super.run(); Paint paint = new Paint(); paint.setAntiAlias(true); boolean isRun = true; boolean direction = true; int position = 0; float locationX = 0; float step = 13; while(isRun){ Canvas canvas = mHolder.lockCanvas(); Paint clearPaint = new Paint(); clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); canvas.drawPaint(clearPaint); clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); int imgWidth = 0; try { InputStream open = mContext.getAssets().open("run" + "/" + runs[position]); Bitmap bitmap = BitmapFactory.decodeStream(open); imgWidth = bitmap.getWidth(); canvas.drawBitmap(bitmap,locationX,200,paint); } catch (IOException e) { e.printStackTrace(); } mHolder.unlockCanvasAndPost(canvas); position ++; //判断方向 if (direction) { locationX += step; } else { locationX -= step; } //由当前位置判断应该行走的方向 if (locationX >= widthPixels - imgWidth/2) { direction = false; }else if (locationX <= (-imgWidth/2)) { direction = true; } try { sleep(40); } catch (InterruptedException e) { e.printStackTrace(); } //加载某张图片 if (position >= runs.length) { position = 0; } } } }; }
图片位置
演示图片:
百度云盘下载
演示截图
相关文章推荐
- Android课程---Activity中保存和恢复用户状态
- android判断是否禁用了录音权限
- android笔记——android studio环境搭建
- android getDeviceId
- Android问题Button的onClick监听里,如何调用外部类的方法(2048实现重新开始游戏)
- 关于Android的.so文件你所需要知道的
- Android项目使用support v7时遇到的各种问题
- Android ListView的item背景色设置
- android打电话/访问网页
- Android之性能优化
- Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
- Android 将String转化为int
- Android 报错:Resources$NotFoundException: String resource ID #0x19 bug
- Android startActivityForResult用法
- Android中的数据存储方式
- android之recyclerview的基本使用
- Android RecyclerView使用简单介绍
- Android 如何在一个layout中引用另一个layout
- [android] 上传文件到服务器
- Android 如何获取一个layout实例