Android自定义View学习记录

Android自定义View学习记录,第1张

Android自定义View学习记录

目录

1、自定义View---onMeasure

2、 自定义View-----onTouchEvent

 3、自定义View----onDraw

4、自定义View-----自定义属性 


1、自定义View---onMeasure
//获取控件宽高的模式
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
MeasureSpec.AT_MOST-----wrap_content
MeasureSpec.EXACTLY------确切的值,在布局中指定了确切的值,(100dp、match_parent)
MeasureSpec.UNSPECIFIED---尽可能的大,未指定模式,当前组件,可以随便用空间,不受限制(ListView,ScrollView)
widthMeasureSpec、heightMeasureSpec----32位的值(int是32位),前2位是模式,后30位是尺寸
-------------MeasureSpec.makeMeasureSpec-------------
// https://gitee.com/jinnian28_admin/AndroidStudy/blob/master/app/src/main/java/com/jin/study/view/CustomListView.java
最高两位是00的时候表示"未指定模式"。即MeasureSpec.UNSPECIFIED
最高两位是01的时候表示"'精确模式"。即MeasureSpec.EXACTLY
最高两位是10的时候表示"最大模式"。即MeasureSpec.AT_MOST
//这个是由我们给出的尺寸大小和模式生成一个包含这两个信息的int变量:size是30位数的尺寸,mode定义heightMode打的模式
public static int makeMeasureSpec(int size, int mode) 
//这个是得到这个变量中表示的模式信息。
public static int getMode(int measureSpec) 
//这个是得到这个变量中表示的尺寸大小的值。
public static int getSize(int measureSpec) 
//把这个变量里面的模式和大小组成字符串返回来,方便打日志
 public static String toString(int measureSpec)
2、 自定义View-----onTouchEvent
     
      return super.onTouchEvent(event);--交给父类处理
      return false;----只调用ACTION_DOWN,ACTION_UP方法,不响应ACTION_MOVE等方法
      return true;
        ----false只响应按下事件,滑动事件不进行响应与监听(view处理);true则全部响应与监听(自己处理)。
    具体查看ViewGroup的dispatchTouchEvent的2794行“ while (target != null) ”
 3、自定义View----onDraw
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
  //绘制文本
    canvas.drawText();
//绘制弧
    canvas.drawArc();
//绘制圆
    canvas.drawCircle();
}
4、自定义View-----自定义属性 
declare-styleable--固定

    
    
    
    
    //
//    
 //   枚举属性只需指定 name,然后用 enum 标签 指定所有可能属性的 name和value(注:value只能为int型)
    
        
        
        
    


第一个与第二个构造函数需要使用this


使用方法
private String mText;
private int mTextSize = 15;
private int mTextColor = Color.BLACK;

TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CustomTextView[自定义的style名称]);
mText = array.getString(R.styleable.CustomTextView_customText);
mTextColor = array.getColor(R.styleable.CustomTextView_customTextColor,mTextColor);
mTextSize = array.getDimensionPixelSize(R.styleable.CustomTextView_customTextSize,mTextSize);
//回收
array.recycle();

学习代码-github https://github.com/jinnian-28/AndroidStudyhttps://github.com/jinnian-28/AndroidStudy
giteehttps://gitee.com/jinnian28_admin/AndroidStudyhttps://gitee.com/jinnian28_admin/AndroidStudy         (CustomListView 与 CustomTextView)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5482767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存