[英]SetContentView(objectOfClass) vs SetContentView(LayoutXMLFile)
我正在用Java為Android編寫一個在畫布上繪制實心圓形狀的應用程序。
我編寫了一個draw circle類來處理事件和圓的實際繪制:
公共類drawCircles擴展了android.support.v7.widget.AppCompatImageView {
float x, y;
Paint paint = new Paint();
PointF pointf = new PointF();
ArrayList<PointF> locations = new ArrayList<PointF>();
public drawCircles(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getX();
y = event.getY();
pointf = new PointF(x, y);
locations.add(pointf);
invalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Random rand = new Random();
int n = rand.nextInt(4) + 1;
switch(n)
{
case 1:
paint.setColor(GREEN);
break;
case 2:
paint.setColor(RED);
break;
case 3:
paint.setColor(YELLOW);
break;
case 4:
paint.setColor(BLUE);
break;
}
int i=0;
while(i < locations.size())
{
canvas.drawCircle(locations.get(i).x,locations.get(i).y,50, paint);
i = i + 1;
}
}
}
公共類MainActivity擴展了AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawCircles draw = new drawCircles(this);
setContentView(draw);
}
}
只要將主要活動的onCreate()方法中的setContentView方法設置為drawCircles類的對象,我的應用程序就可以正常工作
我的問題是,當您將setContentView指向此類的實例時,是否可以自定義布局? 我想添加小部件以適應畫筆大小等。
我的第一個想法是將內容視圖設置為自定義的xml文件,然后在適當的地方調用drawCircle類的方法,但是,如果我理解我已正確完成的閱讀操作,則無法從該類調用onDraw()方法不會擴展視圖,因此無法從主類調用它們,后者擴展了活動類以實現向后兼容性。
在我看來,可能可以為drawCircles類分配特定的layout.xml文件,但是我無法找到完成此操作的任何情況。
任何建議,不勝感激
您可以以任何一種方式對視圖進行任何操作。 這兩個函數運行相同的代碼-一個使用布局標識符的代碼只是將布局放大為View,然后對結果調用setContentView。
將自定義視圖放入xml中也是很有可能的,在這種情況下,將調用其onDraw。 我認為您不太了解xml膨脹的工作原理,因此很難弄清楚如何為您提供幫助。
另外,您永遠不會直接調用onDraw。 當視圖具有無效區域時,框架會調用它。
是的,您可以,讓我們看看一些自定義庫,例如自定義對話框,日歷等。它們定義了屬性的許多情況。
在xml中,只需選擇屬性值,然后自定義視圖類將完成所有操作。
您需要做的第一件事是了解有關自定義視圖,收集屬性,設置條件的更多信息……讓我們看一些示例:
http://www.vogella.com/tutorials/AndroidCustomViews/article.html
http://trickyandroid.com/protip-inflating-layout-for-your-custom-view/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.