Android自定义View

继承View,重写构造函数、onDraw,(onMeasure)等函数。

如果自定义的View需要有自定义的属性,需要在values下建立attrs.xml。在其中定义你的属性。

在使用到自定义View的xml布局文件中需要加入xmlns:前缀="http://schemas.android.com/apk/res/你的自定义View所在的包路径".

在使用自定义属性的时候,使用前缀:属性名,如my:textColor="#FFFFFFF"。

package com.example.xuan.customview_demo0;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;/**  *这个是自定义的TextView.  * 至少需要重载构造方法和onDraw方法  * 对于自定义的View如果没有自己独特的属性,可以直接在xml文件中使用就可以了  * 如果含有自己独特的属性,那么就需要在构造函数中获取属性文件attrs.xml中自定义属性的名称  * 并根据需要设定默认值,放在在xml文件中没有定义。  * 如果使用自定义属性,那么在应用xml文件中需要加上新的schemas,  * 比如这里是xmlns:my="http://schemas.android.com/apk/res/demo.view.my"  * 其中xmlns后的“my”是自定义的属性的前缀,res后的是我们自定义View所在的包  *  */ public class MyView extends View {    Paint mPaint;//画笔,包含了几何图形,文本等的样式和颜色信息  public MyView(Context context) {        super(context);        initView(context,null);    }    public MyView(Context context, AttributeSet attrs) {        super(context, attrs);        initView(context,attrs);    }    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initView(context,attrs);    }        private void initView(Context context, AttributeSet attrs) {        mPaint=new Paint();        //TypeArray是一个用来存放context.obtainStyleAttributes获得的属性的数组  //在使用完后一定要调用recycle方法  //属性的名称是sTyleable中的名称+""+属性名称  TypedArray array=context.obtainStyledAttributes(attrs,R.styleable.MyView);        int textColor=array.getColor(R.styleable.MyView_textColor,0XFF00FF00);        float textSize=array.getDimension(R.styleable.MyView_textSize,36);        mPaint.setColor(textColor);        mPaint.setTextSize(textSize);        array.recycle();//一定要调用,否则这次的设定会对下次的使用造成影响   }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //Canvas中含有很多画图的接口,利用这些接口,可以画出我们想要的图形  mPaint.setStyle(Paint.Style.FILL);//设置填充  canvas.drawRect(10, 10, 100, 100, mPaint);        mPaint.setColor(Color.BLUE);        canvas.drawText("我是被画出来的",10,130,mPaint);        //定义一个矩形   RectF rf1=new RectF(10,160,100,230);        canvas.drawRect(rf1,mPaint);        //画弧顺时针  RectF rf2=new RectF(10,260,100,330);        canvas.drawArc(rf2,0,45,true,mPaint);        //画线  canvas.drawLine(150,150,250,250,mPaint);        //定义一个矩形  RectF rf3=new RectF(300,300,400,400);        //画圆  canvas.drawOval(rf3,mPaint);    }    @Override    public boolean isInEditMode() {       //return super.isInEditMode();  return true;    }}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  xmlns:app="http://schemas.android.com/apk/res-auto"  android:layout_width="match_parent"  android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin"  android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">   <com.example.xuan.customview_demo0.MyView  android:layout_width="match_parent"  android:layout_height="wrap_content"  app:textColor="#6cf"  app:textSize="20sp"  /></RelativeLayout>



更多相关文章

  1. Android(安卓)资源详解(一) 颜色、字符串、位图资源
  2. # Android中Activity四种启动模式和taskAffinity属性详解 #(6原
  3. 使用cocos compile -p android -m release 报错
  4. Android(安卓)Studio 安装虚拟机,报错:emulator: ERROR: x86 emula
  5. Robotium第一天:搭建环境测试微信
  6. 我的Android(安卓)NDK之旅(二),使用ndk-build构建Jni
  7. Android(安卓)assets目录资源读取
  8. 【Android(安卓)动画】帧动画、补间动画、属性动画
  9. [置顶] Android应用程序的debug属性

随机推荐

  1. Android(安卓)能让你少走弯路的干货整理
  2. 我工作就是为了赚钱!
  3. android中使用okhttp实现文件上传
  4. 使用Android(安卓)Studio导入源码
  5. Android下Activity结束(finish())之后没有
  6. 通过SVN导入两个项目(从java移植到andorid
  7. 谈谈Android线程的认识
  8. Android开发之adb && 破解开屏图案 && 代
  9. Android查找未用类和方法
  10. Android(安卓)APK的签名与重新签名