public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TableView tv = new TableView(this);
tv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
setContentView(tv);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
public class TableView extends ViewGroup {
private Paint oval;
private RectF rect;
public TableView(Context context) {
super(context);
oval= new Paint(Paint.ANTI_ALIAS_FLAG);
oval.setColor(Color.GREEN);
}
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawOval(rect , oval);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int wspec = MeasureSpec.makeMeasureSpec(
getMeasuredWidth(), MeasureSpec.EXACTLY);
int hspec = MeasureSpec.makeMeasureSpec(
getMeasuredHeight(), MeasureSpec.EXACTLY);
for(int i=0; i<getChildCount(); i++){
View v = getChildAt(i);
v.measure(wspec, hspec);
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
float w=r-l;
float h=b-t;
rect=new RectF(w/8,h/8,7*w/8,7*h/8);
float theta = (float) (2 * Math.PI/getChildCount());
for(int i=0; i< getChildCount(); i++) {
View v = getChildAt(i);
w = (rect.right-rect.left)/2;
h = (rect.bottom-rect.top)/2;
float half = Math.max(w, h)/2;
float centerX = rect.centerX()+w*FloatMath.cos(theta);
float centerY = rect.centerY()+h*FloatMath.sin(theta);
v.layout((int)(centerX-half),(int)(centerY-half),(int)(centerX+half),(int)(centerY+half));
}
}
}
那麼有幾乎沒有良好而深刻的教程,幾乎任何一塊如何做自定義佈局正確的數據,所以我試圖找出它怎麼做,有什麼我試圖實現的是在屏幕中心繪製綠色橢圓形的佈局,並且我希望此佈局的每個孩子都圍繞橢圓形展開。Android的自定義佈局 - 的onDraw()不會被調用
您可以將橢圓形視爲一張撲克桌,我希望此佈局的孩子可以圍坐在桌子上。
目前該代碼會發生什麼事是,我得到沒有的橢圓形白色應用scren,所以我調試它,看到的onDraw不會被調用......
3個問題:
- 爲什麼onDraw沒有被調用?
- sdk警告我,我不應該在onLayout方法中分配新的對象,所以我應該在哪裏計算RectF,以便它可以用於onDraw調用?
- 調用super.onDraw()會讓所有的孩子自己畫嗎?或者我應該明確地調用他們的draw()?
如果我把它弄錯了,你們可以引導我朝着正確的方向發展,或者有任何與這個主題相關的例子或教程的鏈接,這也會有所幫助!
大,工作,謝謝!什麼關於我的其他問題? –
@kcoppock
提到的方法名稱是** not **'setWillNotDrawEnabled',但只是'setWillNotDraw'(View類的公共方法)。 – lambruscoAcido