SetContentView(objectOfClass)vs SetContentView(LayoutXMLFile)

时间:2018-03-18 21:34:31

标签: java android

我正在用Java编写一个用于android的应用程序,它在画布上绘制填充的圆形。

我写了一个绘制圆圈类来处理事件和圆圈的实际绘图:

public class drawCircles extends 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文件,但是我找不到任何已完成此操作的情况。

非常感谢任何建议

2 个答案:

答案 0 :(得分:0)

无论哪种方式,你都可以随心所欲地做任何事情。这两个函数运行相同的代码 - 采用布局标识符的代码只是将布局扩展为View,然后在结果上调用setContentView。

它也很可能在xml中放置一个自定义视图,在这种情况下将调用它的onDraw。我认为你不太明白xml通胀是如何起作用的,这使得很难弄清楚如何帮助你。

此外,您永远不会直接调用onDraw。当视图具有无效区域时,它由框架调用。

答案 1 :(得分:0)

是的,你可以,让我们看一些自定义库,如自定义对话框,日历,......它们为属性定义了许多案例。

在xml中,只需选择属性值,然后自定义视图类将执行所有操作。

您需要的第一件事是了解有关自定义视图,收集属性,设置条件的更多信息......  让我们看一些样本:

http://www.vogella.com/tutorials/AndroidCustomViews/article.html
http://trickyandroid.com/protip-inflating-layout-for-your-custom-view/
相关问题