Android之SurfaceView(二)
来源:互联网 发布:知乎 上知网 编辑:程序博客网 时间:2024/05/19 17:26
接下来讲讲使用surfView来实现动画。surfView具体的用法说明已在上一篇中讲了,这里就不仔细将了来直接看代码。
1.首先创建一个Contanier容器,用来添加各种画板代码如下:
</pre><pre name="code" class="java">import android.graphics.Canvas;import java.util.ArrayList;import java.util.List;/** * 创建一个容器 * Created by Young on 2015/5/5. */public class Contanier { private List<Contanier> children=null;//用于保存子容器 private float x,y; public float getX() { return x; } public void setX(float x) { this.x = x; } public float getY() { return y; } public void setY(float y) { this.y = y; } public Contanier(){ children=new ArrayList<Contanier>(); } /** * 子容器 * @param canvas */ public void childrenView(Canvas canvas) {} /** * 添加指定的子容器 * @param child */ public void addChildrenView(Contanier child){ children.add(child); } /** * 移除指定的子容器 * @param child */ public void removeChildrenView(Contanier child){ children.remove(child); } public void draw(Canvas canvas){ canvas.save();//保存canvas状态 canvas.translate(getX(),getY()); childrenView(canvas); for (Contanier c:children){ c.draw(canvas); } canvas.restore();//恢复canvas之前保存的状态,防止保存后对canvas执行的操作对后续的绘制的影响 }}
2.创建一个GameView继承与SurfView用来实现动画画图,具体代码如下;
import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceView;/** * Created by Young on 2015/5/5. */public class GameView extends SurfaceView implements SurfaceHolder.Callback { private Contanier contanier; private Rect rect; private Circle circle; private SurfaceHolder holder; private MyThread myThread; public GameView(Context context) { super(context); holder=this.getHolder(); holder.addCallback(this); contanier=new Contanier(); rect= new Rect(); circle=new Circle(); rect.addChildrenView(circle);//将圆放入一个矩形中 contanier.addChildrenView(rect);//将矩形放入一个容器中 myThread=new MyThread(holder);//创建一个绘图线程 } /** * 创建一个线程用于实现动画 */ class MyThread extends Thread { private SurfaceHolder holder; public boolean isRun; public MyThread(SurfaceHolder holder) { this.holder = holder; isRun = true; } @Override public void run() { int count = 0; while (isRun) { Canvas c = null; try { synchronized (holder) { c = holder.lockCanvas();//锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。 c.drawColor(Color.WHITE);//设置画布背景颜色 contanier.draw(c); Thread.sleep(100);//使线程睡眠1s } } catch (InterruptedException e) { e.printStackTrace(); } finally { if (c != null) { holder.unlockCanvasAndPost(c);//结束锁定画图,并提交改变。 } } } } } @Override public void surfaceCreated(SurfaceHolder holder) { myThread.isRun=true; myThread.start();//开启线程 } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { myThread.isRun=false; } /** * 绘制一个红色的矩形 */ class Rect extends Contanier{ private Paint paint=null; public Rect(){ paint=new Paint(); paint.setColor(Color.RED);//画笔颜色 } @Override public void childrenView(Canvas canvas) { super.childrenView(canvas); canvas.drawRect(0, 0, 100, 100, paint); this.setY(this.getY() + 1);//每次像素加一 this.setX(this.getX()+1); } } /** * 绘制一个蓝色的圆 */ class Circle extends Contanier{ private Paint paint=null; public Circle(){ paint=new Paint(); paint.setColor(Color.BLUE); } @Override public void childrenView(Canvas canvas) { super.childrenView(canvas); canvas.drawCircle(50,50,50,paint); } }}
3.最后一步就是把所画好的SurfView添加到页面上去,具体代码如下;
mainActivity.java
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(new MyView(this)); setContentView(new GameView(this)); // MyView myView=new MyView(this); }}
doem下载:http://download.csdn.net/detail/agonie201218/8665291
0 0
- Android之SurfaceView(二)
- Android之SurfaceView简介(二)
- Android游戏开发之旅(二)View和SurfaceView
- Android之SurfaceView实现视频播放(二)
- Android播放器开发之SurfaceView(二)
- Android之SurfaceView(一)
- Android SurfaceView 学习笔记(二)
- Android SurfaceView(二、实现原理)
- Android SurfaceView 的学习(二)
- Android SurfaceView 学习笔记(二)
- Android SurfaceView 详解(二)
- Android SurfaceView 详解(二)
- Android游戏开发之旅二 View和SurfaceView
- Android游戏开发之二:View类与SurfaceView类
- Android之SurfaceView学习(一)
- Android之SurfaceView学习(一)
- Android之SurfaceView学习(一)
- Android之SurfaceView简介(一)
- 第9周-运算符重载(二)-Time类中运算符重载(续)
- android 4.4 支持透明状态栏和透明导航栏
- easyui的引入我所犯的错误改正
- 编写优质嵌入式C程序
- CreateMutex
- Android之SurfaceView(二)
- Count and Say
- Quartz任务调度快速入门
- 苹果开发 笔记(19)
- ExpandableListView讲解
- 正则表达式
- OS 的一些指标信息
- 设计一个有理数类,应该包含加,减,乘,除运算。
- tcpdump命令介绍