zoukankan      html  css  js  c++  java
  • Android UI SurfaceView的使用-绘制组合图型,并使其移动

    绘制容器类:

    //图形绘制容器
    public class Contanier {
    	private List<Contanier> list;
    	private float x=0,y=0;
    	public Contanier(){
    		list=new ArrayList<Contanier>();
    	}
    	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));
        }  
     

    效果:




  • 相关阅读:
    JavaWeb 项目,更改本地文件需刷新才有效问题 (tomcat相关)
    java设置项目根目录 工作目录 working dictionary
    得到JavaWeb项目在Tomcat中的运行路径
    java连接mysql数据库中文乱码问题
    java读utf8 的txt文件,第一个字符为空或问号问题
    java项目连接access数据库
    AJAX POST&跨域 解决方案
    MySQL5.6新特性Index conditontion pushdow
    MathML转换成OfficeML
    .net大型分布式电子商务架构说明(转载来自<头条>)
  • 原文地址:https://www.cnblogs.com/raphael5200/p/5114774.html
Copyright © 2011-2022 走看看