Android SurfaceView 的学习(二)
2016-04-19 08:38
375 查看
这里做了一个简单的组合图形的动画。一 。 组合图形:一个容器类,组合图形的容器Contanier:
public class Contanier { private List<Contanier> children = null; private float x=1,y=1; public Contanier() { children = new ArrayList<Contanier>(); } public void draw(Canvas canvas) { canvas.save(); canvas.rotate(getX(), 50,50); childrenView(canvas); for (Contanier i : children) { i.draw(canvas); } canvas.restore(); } public void childrenView(Canvas canvas) { // TODO Auto-generated method stub } public void addchild(Contanier child) { children.add(child); } public void removechild(Contanier child) { children.remove(child); }一个方块类Rect:
public class Rect extends Contanier { private Paint paint = null; public Rect() { // TODO Auto-generated constructor stub paint = new Paint(); paint.setColor(0xffe51c23); } @Override public void childrenView(Canvas canvas) { // TODO Auto-generated method stub super.childrenView(canvas); canvas.drawRect(0, 0, 100, 100, paint); this.setX(this.getX()+15); }一个圆形类Circle:
public class Circle extends Contanier{ private Paint paint = null; public Circle() { paint = new Paint(); paint.setColor(0xff9c27b0); } @Override public void childrenView(Canvas canvas) { super.childrenView(canvas); canvas.drawCircle(50, 50, 50, paint); } }然后SurfaceView类 GameView:
public class GameView extends SurfaceView implements Callback {
private Contanier contanier; private Rect rect; private Circle circle; private Timer timer; private TimerTask task; public GameView(Context context) { super(context); getHolder().addCallback(this); contanier = new Contanier();rect=new Rect();circle= new Circle(); rect.addchild(circle); contanier.addchild(rect); } private void draw() { Canvas canvas = getHolder().lockCanvas(); canvas.drawColor(0xff5677fc); contanier.draw(canvas); getHolder().unlockCanvasAndPost(canvas); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { <pre name="code" class="java"> draw();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}}这里是就完成了方块中套圆的组合图形。二。动画(rotate旋转)1,contanier
public void draw(Canvas canvas) { canvas.save(); canvas.rotate(getX(), 50,50); //旋转 childrenView(canvas); for (Contanier i : children) { i.draw(canvas); } canvas.restore(); }2,rect
public void childrenView(Canvas canvas) { // TODO Auto-generated method stub super.childrenView(canvas); canvas.drawRect(0, 0, 100, 100, paint); this.setX(this.getX()+15); }3,,gemeview
private void startTimer() { timer = new Timer();
task = new TimerTask() { @Override public void run() { draw(); } }; timer.schedule(task, 100,100); } private void stoptimer() { if (timer!=null) { timer.cancel();timer=null; } }
public void surfaceCreated(SurfaceHolder holder) {<span style="white-space:pre"> </span>startTimer();<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public void surfaceDestroyed(SurfaceHolder holder) {<span style="white-space:pre"> </span>stoptimer();<span style="white-space:pre"> </span>}
相关文章推荐
- Android SurfaceView的学习
- Android Intent 传递二进制数值的两种方法
- 基于 VLC 的 Android 多媒体解决方案
- Android OpenGL 开始篇 <1>
- Android Xposed
- 页面跳转和数据传递(66期第六天)
- Android 中的Intent Action 一览表
- LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android
- 基于github 开源框架Android-PickerView-master实现省市三级联动
- 带你实现开发者头条(二) 实现左滑菜单
- Android动画
- Android开发 判断长按和点击事件
- 链式异步任务类,解决迷之缩进
- android 自定义view起步之一
- Android getReadableDatabase() 和 getWritableDatabase()
- Android Studio教程从入门到精通
- 【整理】Android Studio中Tip of the Day和keymap介绍的快捷键
- Android Studio简单设置
- Android Studio目录结构浅析
- Android系统中自带的图标&一些预定义样式&Android 系统颜色值