没有怎么系统的学习过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 灵魂级画师)
先拿到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的坐标 一个个画点(不要问为什么是点而不是线 因为我不会=。= 这里就不贴代码了 )
你好~自定义控件 第一次见面狠不开心 这里小白~ 欢迎指出不足