点击打开链接,从这里看到了一些我找了半天的东西。

里面主要初学是画三角形、梯形、圆、椭圆、正/长方形;

画上面的除了圆和椭圆都可以通过画线条来完成,三角形的就是如下,用完记得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"

上一个很丑的自定义三角形:

android 带三角形的弹窗 安卓手机三角圆方框_android 带三角形的弹窗