关于android自定义view的方法

1.自定义view从哪里开始呢!从哪里开始画?View有几个方法。

其中一个大家都知晓的OnDraw(), 但是,如果想要随时调用随时刷新的的话,用什么呢?如果做过win api开发的话,就会知道inVidate()方法。这个是通知开始重绘的方法,执行了invaidate之后就会重新开始ondraw()。

2.如果需要添加自定义属性。

  对于自定义的View如果没有自己独特的属性,可以直接在xml文件中使用就可以了
  如果含有自己独特的属性,那么就需要在构造函数中获取属性文件attrs.xml中自定义属性的名称
  并根据需要设定默认值,放在在xml文件中没有定义。
  如果使用自定义属性,那么在应用xml文件中需要加上新的schemas,
  比如这里是xmlns:my="http://schemas.android.com/apk/res/包名"
  其中xmlns后的“my”是自定义的属性的前缀,res后的是我们应用所在的包

自定义属性的用法如下:
第一步:attrs.xml添加一段你自定义的属性名,还有格式:
  
  <declare-styleable name = "TriangleViewAttr">
        <attr name = "tricolor" format = "color" />
    </declare-styleable>

第二步:xmlns:tri="http://schemas.android.com/apk/res/包名"  这句话需要加在最外层的layout属性中,或者加在view的属性里。

第三步:写进来添加的自定义属性
<demo.view.def.MyView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        tri:tricolor="@color/ios_blue"
        />

第四步:在onDraw方法里,调用:
可以再context.obtainStyledAttributes(attrs, R.styleable.TriangleViewAttr);
我这里重新提出了一个方法:
 private void getAttr(Context context, AttributeSet attrs)
    {
        array = context.obtainStyledAttributes(attrs, R.styleable.TriangleViewAttr);
        maincolor = array.getColor(R.styleable.TriangleViewAttr_tricolor, maincolor); 
        //TriangleViewAttr_tricolor 就是TriangleViewAttr.tricolor
        array.recycle();
    }
 有一句:array.recycle();很重要,记得回收哦!


既然,已经获得指定的属性值。

那么,第五步:

根据你所获得的自定义属性值,进行如下操作吧!



OK!那么,我把我的代码贴上来吧!
1.首先是attr.xml:
<?xml version="1.0" encoding="utf-8"?><resources>

<!--xmlns:triattr="http://schemas.android.com/apk/res/com.jsdx.zqysypt"-->    <!--triattr:tricolor="@color/mainact_lefttopblue"-->    <declare-styleable name = "TriangleViewAttr">        <attr name = "tricolor" format = "color" />    </declare-styleable>

</resources>

2.TriangleView类的代码:

package com.commons.widget.views;

import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.util.Log;import android.view.View;import com.jsdx.zqysypt.R;

/** * Created by aa on 2015/1/12. * 画一个三角形  三个点  1.最左上角  2.最左下角  3.右边的中间点;  如图: * @***** * *****@ * @***** * * 用法<TriangleView * xmlns:tri="http://schemas.android.com/apk/res/包名" * android:layout_width="12dp" * android:layout_height="12dp" * tri:tricolor="@color/ios_blue" /> */public class TriangleView extends View {    //默认颜色是透明的色彩    int maincolor=Color.TRANSPARENT;    //是否为等边三角    boolean isEquilateral=false;

//tri:tricolor="@color/ios_blue"    //TypedArray是一个用来存放由context.obtainStyledAttributes获得的属性的数组    //在使用完成后,一定要调用recycle方法    //属性的名称是styleable中的名称+“_”+属性名称    TypedArray array = null;

public TriangleView(Context context) {        super(context);    }

public TriangleView(Context context, AttributeSet attrs) {        super(context, attrs);        getAttr(context, attrs);    }

public TriangleView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        getAttr(context, attrs);    }

private void getAttr(Context context, AttributeSet attrs)    {        array = context.obtainStyledAttributes(attrs, R.styleable.TriangleViewAttr);        maincolor = array.getColor(R.styleable.TriangleViewAttr_tricolor, maincolor); //TriangleViewAttr_tricolor 就是TriangleViewAttr.tricolor        array.recycle();    }

@Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        // 创建画笔        Paint p = new Paint();        p.setColor(maincolor);// 设置红色        p.setStyle(Paint.Style.FILL);//设置填满        //获得几个点的数值        int width=getWidth();        int height=getHeight();        int loc_x=getLeft();        int loc_y=getTop();        Log.d("TriangleView",width+"  "+height);

// 绘制这个三角形,你可以绘制任意多边形        Path path = new Path();        path.moveTo(0, 0);// 此点为多边形的起点        if(isEquilateral)            path.lineTo((height/2)*1.73205f, height/2);   ///这里使用*1.73205f  是因为如果要画一个等边三角形的话需要用这个比例根号三一条直角边是另外一条直角边的 1.73205f 倍。        else            path.lineTo(width, height/2);

path.lineTo(0, height);        path.close(); // 使这些点构成封闭的多边形        canvas.drawPath(path, p);

}

/**重新设置颜色     * @param color     * (0xe96f4a)无效  (0xffe96f4a)这样就可以了     */    public void showColor(int color)    {        maincolor=color;        this.invalidate();    }

}
3.layout布局xml:
<com.commons.widget.views.TriangleView        xmlns:triattr="http://schemas.android.com/apk/res/com.jsdx.zqysypt"    android:layout_width="10dp"    android:layout_height="20dp"    android:layout_alignParentLeft="true"    android:layout_centerVertical="true"    triattr:tricolor="@color/mainact_lefttopblue" />









时间: 2024-08-03 23:19:47

关于android自定义view的方法的相关文章

Android自定义View的实现方法,带你一步步深入了解View(四)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17357967 不 知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回顾一下,我们一共学习了LayoutInflater的原理分析.视图的绘制流程. 视图的状态及重绘等知识,算是把View中很多重要的知识点都涉及到了.如果你还没有看过我前面的几篇文章,建议先去阅读一下,多了解一些原理方面的东 西. 之前我有承诺过,会在View这个话题上多写几篇博客,讲一讲View的

【转】Android自定义View的实现方法,带你一步步深入了解View(四)

原文网址: 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17357967 不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回顾一下,我们一共学习了LayoutInflater的原理分析.视图的绘制流程.视图的状态及重绘等知识,算是把View中很多重要的知识点都涉及到了.如果你还没有看过我前面的几篇文章,建议先去阅读一下,多了解一些原理方面的东西. 之前我有承诺过,会在View这个话题上多写几篇博客,讲一讲Vi

Android 自定义View需要重写ondraw()等方法

Android  自定义View需要重写ondraw()等方法,这篇博客给大家说说自定义View的写法,需要我们继承View,然后重写一些 方法,方法多多,看你需要什么方法 首先写一个自定义的View 继承View package com.example.engineerjspview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import and

Android应用自定义View绘制方法手册

背景 这篇迟迟难产的文章算是对2015前半年的一个交代吧,那时候有一哥们要求来一发Android Canvas相关总结,这哥们还打赏了,实在不好意思,可是这事一放就给放忘了,最近群里小伙伴催着说没更新博客,坐等更新啥的,随先有这么一篇Android应用开发超级基础的文章诞生了(因为这种文章最好写哈,就是用熟了就行).不得不说下这么久为何一直没更新博客的原因了,首先遇上了过年,我个人崇尚过节就该放下一切好好陪陪亲人,珍惜在一起的时光:其次今年开年很是蛋疼,不是不顺当就是深深的觉得被坑,所以心情也就

Android 自定义View视图

创建全新的视图将满足我们独特的UI需求. 本文介绍在指南针开发中会用到的罗盘的界面UI,通过继承View类实现的自定义视图,以此来深刻了解自定义视图. 实现效果图: 源代码: 布局文件activity_main(其中CompassView继承View类): <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.

Android自定义View——圆形进度条式按钮

介绍 今天上班的时候有个哥们问我怎么去实现一个按钮式的进度条,先来看看他需要实现的效果图. 和普通的圆形进度条类似,只是中间的地方有两个状态表示,未开始,暂停状态.而且他说圆形进度的功能已经实现了.那么我们只需要对中间的两个状态做处理就行了. 先来看看实现的效果图: 上面说了我们只需要处理中间状态的变化就可以了,对于进度的处理直接使用了弘洋文章中实现: http://blog.csdn.net/lmj623565791/article/details/43371299 下面开始具体实现. 具体实

Android自定义View初步

有关使用Android如何设计出有个性的界面,按照本人估计,除了遵循google的设计规范,就只能使用自定义View这个最灵活的方式了,这几天找了些资料学习自定义View,但是学习android developer文档中自定义的View比较麻烦,又找了些比较简单的材料,结合自己对CustomView这个实例的理解,开始学习自定义View. 下面实现一个类似时钟/仪表盘的简单界面,通过绘制一个圆来实现,这个圆周围有标的刻度,同时在每五个位置上绘制一个比其他刻度线长的刻度,然后再绘制一个类似的表针.

android 自定义View【2】对话框取色&amp;色盘取色的实现

android 自定义View[2]对话框取色&色盘取色的实现    上一篇文章基本介绍了android自定义view的流程:继承view,复写view的一些方法.实现简单的自定义view.这篇文章主要介绍的是系统对话框取色功能,然后顺便介绍升级版,色盘取色[类似于ps中的吸管,对图片点击相应位置,获取那个位置的颜色]. 一.概述:通过该例子了解以下内容: 1.进一步了解android 自定义view. 2.知道如何获取图片上的颜色值. 3.监听屏幕touch,实现移动的时候自动取色.[onDr

Android自定义View(二、深入解析自定义属性)

转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51468648 本文出自:[openXu的博客] 目录: 为什么要自定义属性 怎样自定义属性 属性值的类型format 类中获取属性值 Attributeset和TypedArray以及declare-styleable ??在上一篇博客<Android自定义View(一.初体验)>中我们体验了自定义控件的基本流程: 继承View,覆盖构造方法 自定义属性 重写onMeasure方法测量宽