簡體   English   中英

SetContentView(objectOfClass)與SetContentView(LayoutXMLFile)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM