文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

AndroidonMeasure与onDraw及自定义属性使用示例

2023-02-16 12:04

关注

1.自定义View简介

自定义view可以被认为是继承自View,系统没有的效果(ImageView,TextView,Button),extents View,extents ViewGrop

2.构造方法

继承View。View有四个构造方法,下面讲述四个构造方法什么时候调用:

第一个构造方法会在代码中new的时候调用

TextView textView = new TextView(this);

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

第二个构造方法在布局layout中使用(调用)

<com.zrc.view_java_demo_01.TextView android:layout_width="match_parent" android:layout_height="match_parent"/>

 public TextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

第三个构造方法在布局layout中使用(调用),但是会有style

调用 <com.zrc.view_java_demo_01.TextView style="@style/defualt"/>

<style name="defualt" > <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">@color/colorAccent</item> </style>
 public TextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

还有第四个构造方法,在用到时候,再做说明,在这里就不再展开。

3.onMeasure()

获取宽高的模式

int widthSize = MeasureSpec.getMode(widthMeasureSpec); //获取前两位
int heightSize = MeasureSpec.getMode(heightMeasureSpec);

获取宽高的值,指定控件的宽高

 int widthSize = MeasureSpec.getSize(widthMeasureSpec); //获取后面30位
 int heightSize = MeasureSpec.getSize(heightMeasureSpec);

MeasureSpec.AT_MOST:在布局中指定了wrap_content

MeasureSpec.EXACTLY: 在布局中特定的值 100dp match_parent fill_parent

MeasureSpec.UNSPECIFIED:尽可能的大,很少用到。listview,Scrollview 在测量子布局时候会用UNSPECIFIED

Scrollview+ListView会出现显示不全的现象?

widthMeasureSpec widthMeasureSpec : 会包含两个信息是一个32位的值,第一个信息是模式:2位 值:30位

4.onDraw()

 
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //画文本
        canvas.drawText();
        //画弧
        canvas.drawArc();
        //画圆
        canvas.drawCircle();
    }

5.onTouch()

    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                //手指按下
                Log.e("TAG","手指按下");
                break;
            case MotionEvent.ACTION_MOVE:
                //手指移动
                Log.e("TAG","手指移动");
                break;
            case MotionEvent.ACTION_UP:
                //手指抬起
                Log.e("TAG","手指抬起");
                break;
        }
        return super.onTouchEvent(event);
    }

6.自定义属性

自定义属性就是用来配置的,android:text = "Darren"是系统自定义属性

6.1在res下的values下面新建attrs.xml

<!-- name 属性名称
         format 格式: string 文字  color:颜色
                       dimension 宽高 字体大小 integer 数字
                       reference 资源(drawable)
          -->
        <attr name="text" format="string"/>
        <attr name="textColor" format="color"/>
        <attr name="textSize" format="dimension"/>
        <attr name="maxLength" format="integer"/>
        <attr name="background" format="reference|color"/>
        <!-- 枚举 -->
        <attr name="inputType">
            <enum name="number" value="1"/>
            <enum name="text" value="2"/>
            <enum name="password" value="3"/>
        </attr>
    </declare-styleable>

6.2在布局中使用

声明命名空间,然后在自己的自定义View中使用

xmlns:app="http://schemas.android.com/apk/res-auto"
<com.zrc.view_java_demo_01.TextView
        app:text="Darren"
        app:textColor="@color/colorAccent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

6.3在自定义View中获取属性

 // 获取自定义属性
 TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.TextView);
 mText = array.getString(R.styleable.TextView_text);
 mTextColor = array.getColor(R.styleable.TextView_textColor,mTextColor);
  mTextSize = array.getDimensionPixelSize(R.styleable.TextView_textSize,mTextSize);
 // 回收
 array.recycle();

到此这篇关于Android onMeasure与onDraw及自定义属性使用示例的文章就介绍到这了,更多相关Android onMeasure内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯