欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

自定义View一些简单操作

程序员文章站 2022-03-10 23:05:44
1.自定义View简介  自定义View可以认为继承自View,系统没有的效果(ImageView,TextView,Button), extends View , extends ViewGroup自定义一个系统的TextView,自定义View入门(今天,明天)2.onMeasure()// 获取宽高的模式int widthMode = MeasureSpec.getMode(widthMeasureSpec); // 获取前两位int heightMode = MeasureSpec.getM...

1.自定义View简介
  自定义View可以认为继承自View,系统没有的效果(ImageView,TextView,Button), extends View , extends ViewGroup
自定义一个系统的TextView,自定义View入门(今天,明天)

2.onMeasure()
// 获取宽高的模式int widthMode = MeasureSpec.getMode(widthMeasureSpec); // 获取前两位int heightMode = 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 会在自定义ViewGroup的时候会详细讲解ScrollView + ListView 会显示不全问题,widthMeasureSpec widthMeasureSpec : 会包含两个信息是一个32位的值,第一个信息是模式:2位 值:30位 3.onDraw()

  /**     * 用于绘制    
   * @param canvas    
   *  */  
   *   @Override    
protected void onDraw(Canvas canvas) { 
       super.onDraw(canvas); 
       // 画文本       
        canvas.drawText();
      // 画弧       
       canvas.drawArc();        
       // 画圆       
        canvas.drawCircle();    }

4.onTouch() 分析源码

/**     * 处理跟用户交互的,手指触摸等等     
* @param event 事件分发事件拦截    
*  * @return     */ 
*    @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);    }

5.自定义属性
自定义属性就是用来配置的,android:text=“Darren” 是系统的一个自定义属性
5.1 在res下的values下面新建attrs.xml

<resources>    
<!--name 自定义View的名字 TextView-->    
<declare-styleable name="TextView">        
<!-- 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>
</resources>

5.2在布局中使用

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

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

5.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);        // 15 15px 15sp  
 mTextSize = array.getDimensionPixelSize(R.styleable.TextView_textSize,mTextSize);        
 // 回收        
 array.recycle();

本文地址:https://blog.csdn.net/qq_42426725/article/details/107167842