博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android UI SurfaceView的使用-绘制组合图型,并使其移动
阅读量:6500 次
发布时间:2019-06-24

本文共 2471 字,大约阅读时间需要 8 分钟。

绘制容器类:

//图形绘制容器public class Contanier {	private List
list; private float x=0,y=0; public Contanier(){ list=new ArrayList
(); } public void draw(Canvas canvas){ canvas.save(); canvas.translate(getX(), getY()); childrenDraw(canvas); for(Contanier c : list){ c.draw(canvas); } canvas.restore(); } public void childrenDraw(Canvas canvas){ } public void addChildren(Contanier child){ list.add(child); } public void removeChildren(Contanier child){ list.remove(child); } 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 class Rect extends Contanier {	private Paint paint;	public Rect(){		paint=new Paint();		paint.setColor(Color.RED);	}		@Override	public void childrenDraw(Canvas canvas) {		super.childrenDraw(canvas);		canvas.drawRect(0, 0, 100, 100, paint);		this.setY(getY()+1);	}}
 绘制圆:

//绘制圆public class Circle extends Contanier {	private Paint paint;	public Circle(){		paint=new Paint();		paint.setColor(Color.BLUE);	}	@Override	public void childrenDraw(Canvas canvas) {		super.childrenDraw(canvas);		canvas.drawCircle(50, 50, 50, paint);	}}
绘制类:

public class GameView extends SurfaceView implements Callback{	private Contanier contaier;	private Rect rect;	private Circle circle;	public GameView(Context context) {		super(context);		contaier=new Contanier();		rect=new Rect();		circle=new Circle();		rect.addChildren(circle);		contaier.addChildren(rect);		getHolder().addCallback(this);	}	private void draw(){		Canvas canvas=getHolder().lockCanvas();		canvas.drawColor(Color.WHITE);		contaier.draw(canvas);		getHolder().unlockCanvasAndPost(canvas);	}		private Timer timer=null;	private TimerTask task=null;		//开始后让其根据Y轴进行移动	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;		}	}	@Override	public void surfaceChanged(SurfaceHolder holder, int format, int width,			int height) {			}	@Override	public void surfaceCreated(SurfaceHolder holder) {		startTimer();	}	@Override	public void surfaceDestroyed(SurfaceHolder holder) {		stopTimer();	}	}
MainActivity:

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new GameView(this));    }
 

效果:

你可能感兴趣的文章
剑指offer青蛙跳台阶问题
查看>>
利用MySQL触发器实现check和assertion
查看>>
JavaのFile类基础操作之问题
查看>>
springmvc和mybatis整合关键配置
查看>>
jQuery中的 $.ajax的一些方法
查看>>
字符和字符串的匹配
查看>>
当你学了现在的忘了前面的
查看>>
博弈论
查看>>
WSS 代码执行的权限提升
查看>>
WCF 第二章 契约
查看>>
我的Android进阶之旅------>Android嵌入图像InsetDrawable的用法
查看>>
监听本机tcp和udp的端口
查看>>
搜索引擎广告过滤Chrome插件
查看>>
leangoo V5.4.2版上线
查看>>
信息提示
查看>>
Java读取property配置文件
查看>>
vue组件定义、组件的切换、组件的通信、渲染组件的几种方式(标签、路由、render)...
查看>>
用Cordova打包Vue-vux项目
查看>>
20145240《网络对抗》MSF基础应用
查看>>
Python列表split方法
查看>>