• 5月2日学习日志


    今天学习了简单的画板的制作。

    代码为:

    public class MyView extends View{
    
        private Paint mPaint;  //绘制线条的Path
        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;
        }
    }
  • 相关阅读:
    #define中的特殊符号
    c++ windows下计时
    c++内存池
    u3d 场景资源打包
    Unity3d 动态加载材质方法
    Unity3D Shader基础教程
    Unity3D Shader入门指南(一)
    Unreal发展史
    阴影锥(shadow volume)原理与展望
    软硬RAID 和 不常见的RAID
  • 原文地址:https://www.cnblogs.com/20193925zxt/p/14910499.html
Copyright © 2020-2023  润新知