首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetContentView(objectOfClass) vs SetContentView(LayoutXMLFile)

SetContentView(objectOfClass) vs SetContentView(LayoutXMLFile)
EN

Stack Overflow用户
提问于 2018-03-19 05:34:31
回答 2查看 23关注 0票数 0

我正在为android编写一个Java应用程序,在画布上绘制实心圆圈形状。

我已经编写了一个绘制圆的类来处理事件和圆的实际绘制:

公共类drawCircles扩展了android.support.v7.widget.AppCompatImageView {

代码语言:javascript
复制
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{

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    drawCircles draw = new drawCircles(this);
    setContentView(draw);
}

}

只要将main活动的onCreate()方法中的setContentView方法设置为drawCircles类的对象,我的应用程序就可以正常工作

我的问题是,当您将setContentView指向这样一个类的实例时,是否可以自定义布局?我想添加画笔大小等小工具。

我的第一个想法是将内容视图设置为一个定制的xml文件,然后在适当的地方调用drawCircle类中的方法。但是,如果我理解我所做的读取是正确的,那么从没有扩展视图的类中调用onDraw()方法是不可能的,所以我不能从扩展activity类的主类中调用它们来实现向后兼容性。

我突然想到,可以为drawCircles类分配一个特定的layout.xml文件,但我还没有找到这样做的任何情况。

任何建议都非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2018-03-19 05:39:31

无论采用哪种方式,您都可以对视图执行任何操作。这两个函数运行相同的代码-接受布局标识符的函数只是将布局膨胀为视图,然后对结果调用setContentView。

也可以在xml中放置一个自定义视图,在这种情况下,它的onDraw将被调用。我认为您不太了解xml膨胀是如何工作的,这使得很难弄清楚如何帮助您。

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

票数 0
EN

Stack Overflow用户

发布于 2018-03-19 11:51:05

是的,你可以,让我们看看一些定制库,比如自定义对话框,日历,……它们为属性定义了许多情况。

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

你需要做的第一件事是学习更多关于自定义视图,收集属性,设置条件...让我们来看一些示例:

代码语言:javascript
复制
http://www.vogella.com/tutorials/AndroidCustomViews/article.html
http://trickyandroid.com/protip-inflating-layout-for-your-custom-view/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49353044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档