【Android自定义View】安卓制作自定义控件

  很多时候安卓系统的控件在美观程度上和功能使用上都无法做到极致,所以对于不同项目开发应当要有一些定制的控件,下面我来讲讲自定义控件制作的流程

  在此我以一个开发案例做例子。

 自定义一个EditText,在右边添加一个删除功能

  :继承EditText 

部分代码如下:

  1. private void init() {  
  2.         imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray);  
  3.         imgAble = mContext.getResources().getDrawable(R.drawable.delete);  
  4.         addTextChangedListener(new TextWatcher() {  
  5.             @Override  
  6.             public void onTextChanged(CharSequence s, int start, int before, int count) {}  
  7.             @Override  
  8.             public void beforeTextChanged(CharSequence s, int start, int count, int after) {}  
  9.             @Override  
  10.             public void afterTextChanged(Editable s) {  
  11.                 setDrawable();  
  12.             }  
  13.         });  
  14.         setDrawable();  
  15.     }  
  1.  //设置删除图片  
  2.     private void setDrawable() {  
  3.         if(length() < 1)  
  4.             setCompoundDrawablesWithIntrinsicBounds(nullnull, imgInable, null);  
  5.         else  
  6.             setCompoundDrawablesWithIntrinsicBounds(nullnull, imgAble, null);  
  7.     }  
  8.       
  9.      // 处理删除事件  
  10.     @Override  
  11.     public boolean onTouchEvent(MotionEvent event) {  
  12.         if (imgAble != null && event.getAction() == MotionEvent.ACTION_UP) {  
  13.             int eventX = (int) event.getRawX();  
  14.             int eventY = (int) event.getRawY();  
  15.             Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);  
  16.             Rect rect = new Rect();  
  17.             getGlobalVisibleRect(rect);  
  18.             rect.left = rect.right - 50;  
  19.             if(rect.contains(eventX, eventY))   
  20.                 setText("");  
  21.         }  
  22.         return super.onTouchEvent(event);  
  23.     }  
  24. 然后可以在XML放入可以用了


你可能感兴趣的:(安卓,控件)