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

这里写图片描述

/**
 * 自定义 图形
 */
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
    }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值