安卓复习9

Posted 山河执手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓复习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;
    

以上是关于安卓复习9的主要内容,如果未能解决你的问题,请参考以下文章

安卓复习9

安卓复习9

安卓复习9

安卓复习7

安卓复习10

安卓复习8