你好,自定义控件

    xiaoxiao2021-12-14  20

    没有怎么系统的学习过Android 所以现在自己写Demo的时候用到了什么就看看什么,感觉学的好乱····(今天的风真是喧嚣~)

    嗯  今天看了看自定义控件  虽然对我来说感觉十分高大上···(说白了 我没看懂···~!!!!)

    算了  一把辛酸泪  本来想写一个控件显示坐标系(并且能显示方程的图形)

    于是乎:

    该怎么显示一个坐标系?

    该如何画出图形?

    嗯哼~  显示坐标系  也就是在空间中画一个坐标系(画两条线呗)

    翻一翻怎么绘制(百度什么的很多)

    Paint  Canvas Bitmap…… (一脸囧 WTF )

    简单说Paint 是画笔 Canvas 是把画布裱起来的  Bitmap 是画布

    也就是说 我们用Paint 在Bitmap上画图然后放到Canvas中(嗯 我的理解是这样···有错误请指出感激不尽~)

    百度的也看了  思路也有了  我们需要在一个View上画出 坐标系和方程

    GoGOGo

    先继承了一个View

    public class Demo2 extends View { public Demo2(Context context) { super(context); } public Demo2(Context context, AttributeSet attrs) { super(context, attrs); } public Demo2(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } }

    然后呢··=。=   嗯嗯 我们先画一下试试

    复写onDraw()方法

    @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint mPaint = new Paint(); mPaint.setColor(Color.BLUE); canvas.drawColor(Color.WHITE); canvas.drawLine(0,0,500,500,mPaint); } 先简单的画一下从(0,0) (500,500)的一条直线

    我们会发现Android中 画图机制的 (0,0)点在左上角如图(QWQ  灵魂级画师)

    那么我们的坐标轴应该画呢(T.T)

    先拿到View的大小然后(0,0)点应该在中间  画x y 轴

    /** * 测量 * @param widthMeasureSpec * @param heightMeasureSpec */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); w = MeasureSpec.getSize(widthMeasureSpec); h =MeasureSpec.getSize(heightMeasureSpec); }在绘制图形之前  需要先进行测量  在测量的时候就可以拿到View的大小了(Get)

    其实呢  有个错误的示范就是一开始 我 写的是

    w=widthMeasureSpec

    h=heightMeasureSpec 

    结果发现 w = 2147482923(我看到之后就懵了)

    后来查了下  这里的widthMeasureSpec 是 窗口的大小+MeasureSpec类中的specMode的值

    好了 继续画坐标轴

    在onDrow方法中写

    //x y 坐标系 canvas.drawLine(w/2,50,w/2,h-50,mPaint); canvas.drawLine(50,h/2,w-50,h/2,mPaint); T.T到这里  应该也算画了一个坐标轴(2条垂直线???)

    方程呢···

    就去x轴上的坐标然后根据方程 算出y的坐标  一个个画点(不要问为什么是点而不是线   因为我不会=。=  这里就不贴代码了   )

    你好~自定义控件  第一次见面狠不开心   这里小白~  欢迎指出不足

    转载请注明原文地址: https://ju.6miu.com/read-969068.html

    最新回复(0)