安卓复习9

安卓复习9

1.Android 提供了三个主要的类来使用图形和图像:Canvas、Paint、Bitmap
2.可以通过以下两种方式在画布上绘图: View类、SurfaceView类
3.要使用 View 类绘制图形,您需要扩展 View 类并定义 onDraw() 回调方法。一般在onDraw方法里绘制图形
4. 无论何时您想要绘制画布,必需调用 invalidate() 方法来刷新视图.
5. 常用的绘图方法

方法 描述
drawBitmap (Bitmap bitmap,float left, float top, Paint paint)
在指定坐标上以指定的颜料绘制指定的位图。
drawCircle (float cx, float cy,float radius, Paint paint)
以指定的坐标为圆心,按指定的半径和指定的颜料画圆。
drawLine (float x1, float y1,float x2, float y2, Paint paint)
以指定的颜料从 (x1, y1) 到 (x2, y2) 画一条直线。
drawRect (float left, float top, float right, float bottom,Paint paint)
以指定的颜料画一个矩形,左上角在 (x1, y1),右下角在 (x2, y2)。

下面是一个随手画代码

public class MyView extends View{

    private Paint mPaint;  //绘制线条的Paint
    private Path mPath;      //记录用户绘制的Path
    private Canvas mCanvas;  //内存中创建的Canvas
    private Bitmap mBitmap;  //缓存绘制的内容

    private int mLastX;
    private int mLastY;

	//三个重载的构造方法
    public MyView(Context context) {
        super(context);
        init();
    }
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }
	//初始化方法
    private void init(){
        mPath = new Path();
		//初始化画笔
        mPaint = new Paint();   
        mPaint.setColor(Color.GREEN);
		//抗锯齿,使得边界的地方更加平滑
        mPaint.setAntiAlias(true);
		//设置防止抖动,使整个图片更加柔和
        mPaint.setDither(true);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND); //结合处为圆角
        mPaint.setStrokeCap(Paint.Cap.ROUND); // 设置转弯处为圆角
        mPaint.setStrokeWidth(20);   // 设置画笔宽度
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int width = getMeasuredWidth();
        int height = getMeasuredHeight();
        // 初始化bitmap,Canvas
        mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        mCanvas = new Canvas(mBitmap);
    }

    //重写该方法,在这里绘图
    @Override
    protected void onDraw(Canvas canvas) {
        drawPath();
        canvas.drawBitmap(mBitmap, 0, 0, null);
    }

    //绘制线条
    private void drawPath(){
        mCanvas.drawPath(mPath, mPaint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        int x = (int) event.getX();
        int y = (int) event.getY();

        switch (action)
        {
			//当屏幕检测到第一个触点按下之后就会触发到这个事件。
            case MotionEvent.ACTION_DOWN:
                mLastX = x;
                mLastY = y;
				//移动画笔到最新的坐标
                mPath.moveTo(mLastX, mLastY);
                break;
			//当触点在屏幕上移动时触发,触点在屏幕上停留也是会触发的
            case MotionEvent.ACTION_MOVE:
                int dx = Math.abs(x - mLastX);
                int dy = Math.abs(y - mLastY);
                if (dx > 3 || dy > 3)
					//用于绘制线条
                    mPath.lineTo(x, y);
                mLastX = x;
                mLastY = y;
                break;
        }
		//刷新视图
        invalidate();
        return true;
    }
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值