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));
}
}
}
と呼ばれることは決してありませんがまあNONE良いと深いチュートリアルやほとんどのカスタムレイアウトの権利を行う方法についてのデータのどの部分がほとんど存在し、私はそのを行う方法を見つけ出すことを試み、何私は実装しようとしています画面の中央に緑色の楕円形を塗るレイアウトです、私はこのレイアウトのすべての子を楕円の周りにレイアウトしたい。Androidのカスタムレイアウト - onDraw()
あなたはこの楕円形をポーカーテーブルと考えることができます。これは、このレイアウトの子どもたちがその周りに座ることを望みます。
- 理由:...
3質問現在このコードで何が起こる
は私がいない楕円形の白いアプリのscrenを得るということですので、私はそれをデバッグし、onDrawが呼び出されることは決してありませんことを見ましたonDrawは呼び出されませんか?
- sdkは、onLayoutメソッド内に新しいオブジェクトを割り当てるべきではないことを警告します。したがって、onDrawコールの準備が整うようにRectFをどこで計算する必要がありますか?
- super.onDraw()を呼び出すと、すべての子が自分自身にペイントされますか?または明示的にdraw()を呼び出す必要がありますか?
もし私が間違っていたら、あなたは正しい方向に私を導くことができますし、この問題に関する実例やチュートリアルへのリンクもあります。
働いていた偉大な、感謝!、どのような私の他の質問についてのだろうか? –
@kcoppock
上記のメソッド名は** setWillNotDrawEnabledではなく、単純に 'setWillNotDraw'(' View'クラスのpublicメソッド)です。 – lambruscoAcido