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);
}
}
轉載于:https://www.cnblogs.com/android-zcq/p/3139414.html