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));
}
}
}
कहा जाता हो जाता है कभी नहीं वैसे वहाँ लगभग कोई अच्छा और गहरी ट्यूटोरियल और शायद ही कस्टम लेआउट सही करने के लिए पर डेटा के किसी भी भाग रहे हैं, तो मैं कैसे अपनी किया यह पता लगाने की कोशिश की, क्या मैं लागू करने की कोशिश कर रहा हूं एक लेआउट है जो स्क्रीन के केंद्र में एक हरा अंडाकार चित्रित करता है, और मैं चाहता हूं कि इस लेआउट के हर बच्चे को अंडाकार के चारों ओर बाहर रखा जाए।एंड्रॉयड कस्टम लेआउट - OnDraw()
आप उस अंडाकार को पोकर टेबल के रूप में सोच सकते हैं जो मैं चाहता हूं कि इस लेआउट के बच्चे इसके आस-पास बैठ जाएं।
क्या वर्तमान में इस कोड से होता है कि मैं कोई अंडाकार के साथ एक सफेद एप्लिकेशन scren मिलता है, इसलिए मैं इसे डिबग और देखा OnDraw कहा जाता हो जाता है कभी नहीं है कि ...
3 प्रश्न:
- क्यों क्या चल रहा है?
- एसडीके मुझे चेतावनी देता है कि मुझे ऑनआउट विधि के भीतर नई ऑब्जेक्ट्स आवंटित नहीं करनी चाहिए, तो मुझे रेक्टएफ की गणना कहां करनी चाहिए ताकि यह आने वाले कॉल के लिए तैयार हो?
- super.onDraw() को कॉल करने से सभी बच्चे खुद को पेंट कर देंगे? या मुझे स्पष्ट रूप से उनके ड्रा() को आमंत्रित करना चाहिए?
यदि मुझे यह सब गलत लगता है और आप लोग मुझे सही दिशा में मार्गदर्शन कर सकते हैं, या इस विषय से संबंधित उदाहरण या ट्यूटोरियल के लिए कोई लिंक है जो सहायक भी होगा!
महान है कि काम किया, धन्यवाद !, और क्या मेरी अन्य प्रश्न के बारे में? –
@kcoppock
उल्लिखित विधि का नाम ** ** ** setWillNotDrawEnabled' नहीं है, लेकिन बस 'setWillNotDraw' ('View'class की सार्वजनिक विधि) है। – lambruscoAcido