android--(绘制几何图形、图片、surfaceView)

来源:互联网 发布:ipv6加端口号访问 编辑:程序博客网 时间:2024/05/02 16:49

这里写图片描述

/** * 自定义 图形 */public class Mview extends View {    public Mview(Context context) {        super(context);    }    /**     * 是一个事件方法, 会在组件 加载时 调用     *     * @param canvas :画布     */    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        /**         * 设置颜色为白色         */        canvas.drawColor(Color.WHITE);        Paint paint = new Paint();        /**         * 去锯齿         */        paint.setAntiAlias(true);        /**         * 设置 paint 的颜色         */        paint.setColor(Color.RED);        /**         * 设置 paint的 style 为stroke :空心         */        paint.setStyle(Paint.Style.STROKE);        /**         * 设置 paInt 的外框 宽度         */        paint.setStrokeWidth(3);        /**         * 画一个空心圆形         *         * 参数:圆心x,圆心Y,半径r,paint         */        canvas.drawCircle(40, 40, 30, paint);        /**         * 画一个长方形         * 参数:let top right bootom         */        canvas.drawRect(10, 170, 70, 200, paint);        /**         * 画一个空心椭圆形         */        RectF re = new RectF(10, 220, 70, 250);        canvas.drawOval(re, paint);        /**         * 画一个空心三角形         */        Path path1 = new Path();        path1.moveTo(10, 330); //从哪个点 到 哪个点        path1.lineTo(70, 330);//边        path1.lineTo(40, 270);        path1.close();        canvas.drawPath(path1,paint);    }}public class MyView extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new Mview(this));    } }

这里写图片描述

/** * 自定义 画图片 */public class Mview extends View {    public Mview(Context context) {        super(context);    }    /**     * 是一个事件方法, 会在组件 加载时 调用     *     * @param canvas :画布     */    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //画笔        Paint p = new Paint();        //从资源中得到 图片        Bitmap bitmap =                BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);        //绘制图片        canvas.drawBitmap(bitmap, 0, 0, p);    }}public class MyView extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new Mview(this));    } }

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

/** * 自定义 surfaceView(相当于独立的一块屏幕) */public class MysurfaceView extends SurfaceView implements SurfaceHolder.Callback {    //控制屏幕绘制的对象    private SurfaceHolder holder;    private MyThread myThread;    public MysurfaceView(Context context) {        super(context);        holder = getHolder();        //添加回调接口,因为实现了,所以传this,对象一创建就调用回调的方法        holder.addCallback(this);    }    class MyThread implements Runnable {        private SurfaceHolder holder;        Canvas canvas = null;        //作用:线程什么进侯开始,什么时侯结束        private boolean isRun;        public MyThread(SurfaceHolder holder) {            this.holder = holder;            isRun = true;        }        @Override        public void run() {            int count = 0;            while (isRun) {                try {                    synchronized (holder) {//因为有多个 线程在操作,所以要同步                        //锁定一个画布,锁定后,可以通过其返回的 画布对象 Canvas,在上面画图等操作了                        canvas = holder.lockCanvas();                        canvas.drawColor(Color.BLACK);                        Paint paint = new Paint();//创建画笔                        paint.setColor(Color.RED);                        paint.setAntiAlias(true);                        paint.setStyle(Paint.Style.FILL);//画笔为实心的                        RectF rect = new RectF(10, 10, 100, 100);                        canvas.drawRect(rect, paint);//画矩形                        paint.setTextSize(30);//字体大小                        canvas.drawText("当前是第" + (count++)+"秒", 10, 150, paint);                        Thread.sleep(1000);                    }                } catch (InterruptedException e) {                    e.printStackTrace();                } finally {                    holder.unlockCanvasAndPost(canvas);//释放 画布的锁                }            }        }    }    /*************** 事件回调方法  *********************************/    /**     * 回调     *     * @param holder     */    @Override    public void surfaceCreated(SurfaceHolder holder) {        myThread = new MyThread(holder);        myThread.isRun = true;        new Thread(myThread).start();    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {    }}public class My extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MysurfaceView(this));//实例化surfaceView    } }
0 0
原创粉丝点击