android自定义控件的学习

一· 屏幕中坐标系的认知:

贴三张图就明白清楚了,参考地址:
https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B01%5DCoordinateSystem.md
android自定义控件的学习_第1张图片
Paste_Image.png
android自定义控件的学习_第2张图片
Paste_Image.png
android自定义控件的学习_第3张图片
Paste_Image.png

二· 自定义view分类,流程及一些重要函数:

android自定义控件的学习_第4张图片
Paste_Image.png
android自定义控件的学习_第5张图片
Paste_Image.png

三· 自定义一个数字时钟

public class MyClock extends TextView {   
 private final static String TAG = "DigitalClock";   
 private Calendar mCalendar;  
  private String mFormat = "yyyy-MM-dd HH:mm:ss  E";   //根据不同的时间格式显示不同   
 private Runnable mTicker;   
 private Handler mHandler;  
  private boolean mTickerStopped = false;   
 public MyClock(Context context) {  
      super(context);     
   initClock(context);   
 }   
 public MyClock(Context context, AttributeSet attrs) {      
  super(context, attrs);     
   initClock(context);   
 } 
   private void initClock(Context context) {    
    if (mCalendar == null) {      
      mCalendar = Calendar.getInstance();    
    }
    } 
   @Override  
  protected void onAttachedToWindow() {      
  mTickerStopped = false;       
 super.onAttachedToWindow();     
   mHandler = new Handler();      
  mTicker = new Runnable() {     
       public void run() {       
         if (mTickerStopped)            
        return;                
      mCalendar.setTimeInMillis(System.currentTimeMillis());      
      setText(DateFormat.format(mFormat, mCalendar));              
      invalidate();       
      long now = SystemClock.uptimeMillis();          
      long next = now + (1000 - System.currentTimeMillis() % 1000);    
      mHandler.postAtTime(mTicker, next);       
     } 
       };   
     mTicker.run(); 
   } 
   @Override 
   protected void onDetachedFromWindow() {        
super.onDetachedFromWindow();  
      mTickerStopped = true;   
 }
}

你可能感兴趣的:(android自定义控件的学习)