View组件就类似于一个矩形空白区域,刚开始它里面什么都没有,对于android应用的其他UI组件来说,他们都继承了VIew组件,然后在View组件的空白区域上绘制外观.
基于这个原理,开发者可以开发出项目定制的组件,当android系统提供的UI不能满足开发需求时,可以自定义类去继承View类或者View类的相关子类.然后重写View类中的某些方法; 当这个自定义类写完后,可以通过代码把该自定义组件添加到指定容器中
通常情况下,会写一个构造器; 例如定义一个随手指触摸移动的球体
public class DrawCircle extends View { public float startx=30; public float starty=40; public DrawCircle(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p = new Paint(); p.setColor(Color.RED); canvas.drawCircle(startx, starty, 15, p); } }
public class MainActivity extends Activity { private DrawCircle dc; private LinearLayout ll; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ll = (LinearLayout) findViewById(R.id.ll_root); dc = new DrawCircle(this); //设置自定义组件的宽高 dc.setMinimumHeight(500); dc.setMinimumWidth(300); dc.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { dc.startx = event.getX(); dc.starty = event.getY(); //视图发生变化,进行重绘 dc.invalidate(); return true; } }); ll.addView(dc); } }