点击打开链接,从这里看到了一些我找了半天的东西。
里面主要初学是画三角形、梯形、圆、椭圆、正/长方形;
画上面的除了圆和椭圆都可以通过画线条来完成,三角形的就是如下,用完记得close路径:
// 三角形
path = new Path();
path.moveTo(10, 100);
path.lineTo(90, 100);
path.lineTo(50, 60);
path.close();
在onDraw()方法中提交时,是提交路径就可以了:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.i("11","path>>>"+path+"<<paint>>"+paint);
canvas.drawPath(path, paint);
paint.setTextSize(24);
canvas.drawText("三角形", 240, 320, paint);
}
画点:canvas.drawPoints,
画圆的:canvas.drawCircle,
画正/长方形的:canvas.drawRect;
它们都是根据里面的参数来确定你画出来的位置和大小,
画笔:Paint,主要是设置颜色、样式和抗锯齿。
自定义控件,除了继承VIEW外还可以继承已有的控件或者布局来进行绘画,也可以自己在res目录下,新建一个attrs文件,里面写你想自定义控件的要用到的类型,如大小、颜色等,如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomViewT">
<attr name="textColor" format="color" />
<attr name="textSize" format="dimension" />
</declare-styleable>
<!-- 1. color:颜色值 <attr name = "textColor" format = "color" /> -->
<!-- 2.boolean:布尔值 <attr name = "focusable" format = "boolean" /> -->
<!-- 3.dimension:尺寸值。 <attr name = "layout_width" format = "dimension" /> -->
<!-- 4.float:浮点值。 <attr name = "fromAlpha" format = "float" /> -->
<!-- 4.float:浮点值。 <attr name = "toAlpha" format = "float" /> -->
<!-- integer:整型值。 <attr name = "frameDuration" format="integer" />-->
</resources>
然后在你继承View或者已有控件的类里面通过TypedArray类来调用你在attrs文件里面定义的属性,如下:
public class CustomViewT extends View {
private Paint paint;
private String text = "asdasdasdas";
public CustomViewT(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
paint.setStyle(Style.FILL);
// TypedArray是存放资源的array,1.通过上下文得到这个数组,attrs是构造函数传进来的,对应attrs.xml
TypedArray typed = context.obtainStyledAttributes(attrs,
R.styleable.CustomViewT);
// 获得xml里定义的属性,格式为 名称_属性名 后面是默认值
int textColor = typed.getColor(R.styleable.CustomViewT_textColor,
0xFFFFFFFF);
float textSize = typed.getDimension(R.styleable.CustomViewT_textSize,
15.0f);
paint.setColor(textColor);
paint.setTextSize(textSize);
// 为了保持以后使用该属性一致性,返回一个绑定资源结束的信号给资源
typed.recycle();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText(text,10,60, paint);
}
}
然后在布局里面引用,因为不管你画的是什么,肯定要在界面上显示就少不了布局,所以你最终还是会到布局里面你实现你的自定义控件,布局里面的使用如下:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:testview="http://schemas.android.com/apk/res/com.example.testone001.loning"
android:id="@+id/menu_sliding_fragment"
android:layout_width="wrap_content"
android:layout_height="match_parent" >
<com.example.testone034.myview.CustomViewT
android:layout_width="wrap_content"
android:layout_height="wrap_content"
testview:textColor="@android:color/holo_green_dark"
testview:textSize="14sp" />
</FrameLayout>
重要的是这个:
<pre class="html" name="code">xmlns:android=<a target=_blank href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>
xmlns:testview=<a target=_blank href="http://schemas.android.com/apk/res/com.example.testone001.loning">http://schemas.android.com/apk/res/com.example.testone001.loning</a>
和android的大体一样吧,前面的testview你可以随便写,后面res/后面带的就是你真正的包名,不晓得在哪的话去你的AndroidManifest.xml里面能找到:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testone001.loning"
android:versionCode="1"
android:versionName="1.0" >
这里面就是你真正的包名,然后再代码里面你就可以用,给你在attrs文件里面的设置的属性添加具体的数据了,上面布局里面的这两行就是:
testview:textColor="@android:color/holo_green_dark"
testview:textSize="14sp"
上一个很丑的自定义三角形: