【备忘】Android模拟小球自由落体(SurfaceView)

来源:互联网 发布:一致性hash算法 编辑:程序博客网 时间:2024/05/17 21:06
package com.example.sft;import java.util.ArrayList;import java.util.List;import java.util.Random;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.RadialGradient;import android.graphics.Shader;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;public class TestSurfaceView extends SurfaceView implements SurfaceHolder.Callback{        private Paint cp;    private List<KCircle> KCList;    private Random r;    public TestSurfaceView(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub        getHolder().addCallback(this);        cp=new Paint();        cp.setColor(Color.BLACK);        KCList=new ArrayList<KCircle>();        r=new Random();    }    @Override    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {        // TODO Auto-generated method stub            }    private int getRandomColor(){        return r.nextInt()%0xff000000;    }    @Override    public void surfaceCreated(SurfaceHolder arg0) {        // TODO Auto-generated method stub                    }        /**     *      */    public void run(){        new MyThread().start();    }    @Override    public void surfaceDestroyed(SurfaceHolder arg0) {        // TODO Auto-generated method stub            }        @Override    public boolean onTouchEvent(MotionEvent event) {        // TODO Auto-generated method stub         if (event.getAction() != MotionEvent.ACTION_DOWN &&                 event.getAction() != MotionEvent.ACTION_MOVE) {             return false;         }        KCList.add(new KCircle(getRandomColor(),(int)event.getX(),(int)event.getY()));        return true;    }        class MyThread extends Thread{        @Override        public void run() {            // TODO Auto-generated method stub            while(true){            Canvas c=getHolder().lockCanvas();            c.drawPaint(cp);            for(int i=0;i<KCList.size();i++){                KCList.get(i).moveAndDraw(c);                if(KCList.get(i).y>getHeight()){                    KCList.remove(i);                }            }                        try {                sleep(15);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }                        getHolder().unlockCanvasAndPost(c);            }                    }    }        }
package com.example.sft;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.RadialGradient;import android.graphics.Shader;public class KCircle {        private int color;    public int x;    public int y;    private Paint p;    private int radius;    int v;    int a;            public KCircle(int color){        this.color=color;        x=0;        y=0;        v=0;        a=2;        radius=25;        p=new Paint();        p.setColor(color);        RadialGradient rg=new RadialGradient(x+10, y-10, 25,color+(0xffffffff-color)/2, color, Shader.TileMode.CLAMP);                p.setShader(rg);        p.setAntiAlias(true);    }        public KCircle(int colcr,int x,int y){        this(colcr);        this.x=x;        this.y=y;    }        public void moveAndDraw(Canvas c){        y+=v;        v+=a;        draw(c);    }        public void moveTo(int x,int y){        this.x=x;        this.y=y;    }        public void draw(Canvas c){        RadialGradient rg=new RadialGradient(x+10, y-10, 25,0xffdddddd, color, Shader.TileMode.CLAMP);        p.setShader(rg);        c.drawCircle(x, y, radius, p);    }    }

把TestSurfaceView放入Activity显示出来  然后调用run方法   手指点击的地方就会有小球落下


原创粉丝点击