天天看點

開發自定義View

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