【问题标题】:Drawing a shape?绘制形状?
【发布时间】:2018-09-24 23:30:33
【问题描述】:

我尝试了很长时间没有答案。我为该视图使用了 setContentView(view)。但是,我还有另一个 setContentView:

setContentView(R.layout.activity_main);//Buttons, Views from XML...
setContentView( mCustomDrawableView);//Custom Shape

问题是,它只显示 ONE 视图,形状。在XML 上定义的Buttons 消失了。基本上,最后调用的setContentView(view) 是唯一被绘制的View。我还尝试了许多其他方法来绘制形状,但没有有效的答案。

我已经看到多个setContentView 确实相互重叠,但这是部分起作用的唯一方式。有什么方法可以同时显示视图另一种方式来绘制形状和我的XML Views

编辑:

我的形状是用 java 制作的,而不是 XML

编辑 2:

这是我的customShape 班级:

 public class CustomDrawableView extends View {
    private ShapeDrawable mDrawable;

    public CustomDrawableView(Context context) {
        super(context);

        int x = 10;
        int y = 10;


        mDrawable = new ShapeDrawable(new RectShape());
        // If the color isn't set, the shape uses black as the default.
        mDrawable.getPaint().setColor(0xff74AC23);
       mDrawable.setBounds(x,y,x+10,y+10);
    }

    protected void onDraw(Canvas canvas) {
        mDrawable.draw(canvas);
    }
}

【问题讨论】:

  • @CodingM 您可以将画布添加到布局中,然后覆盖 onDraw() 以对其进行编辑,这样您只显示布局,而不是画布。
  • @Jamie Corkhill 我过去曾使用过它,对我来说它确实有效。你能给我举个例子吗?

标签: java android view setcontentview


【解决方案1】:

好的 ... setContentView 是一个接受布局/视图/任何内容的东西,输入定义了您正在设置的活动/片段的内容。

当然,您的第一个调用会完成整个布局,第二个调用会擦除该布局并将内容设置为您发送给它的内容。

问题是拥有您的视图,然后将其添加到布局中。如果您在初始 setContentView xml 中有任何名为 (+id) 并已定义 (Layout x = getfromid(r.id.x) 的视图,那么您可以使用 x.addview(myview) 或 x.addview( CustomDrawableView(context))。

-编辑澄清-

一个 Activity/Fragment 有一个您使用 setContentView 设置的布局。你这样做一次,通常。布局定义视图的放置位置。

所以,您在 onCreate 中设置了ContentView(your.xml)。如果您有一个编程视图类,则可以做两件事:将新的 YourView 添加到您的 act/frag 中的命名和指定布局(使用 xml 中定义的任何布局,在 setContentView 中传递的 xml 中传递给您的 frag/act 和然后由代码中的 Layout x = findViewById(R.id.idoflayoutinxmlinfield 'android:id="@+id/x") 定义。

然后你可以 x.addview(new MyView(context)) or Myview z = new MyView(context) and x.addView(z);

-edit2-

当您变得更好时,您也可以通过将自定义视图添加到原始 xml 定义中来将其添加到原始布局中。

-edit3-

叹息。好的。这里是:

在您的活动 java 文件中:

RelativeLayout myRellayout;

@Override
public void onCreate(){
    setContenView(your.xml)
    myRelLayout = findViewByID(R.id.myrellayout);
    myRelLayout.addView(new MyCustomView(this));
    //or define your custom view and the add it by:
    //MyCustomView mcv = new MyCustomView(this);
    //myRelLayout.addView(mcv);
}

你的 xml 应该包含这样的布局:

<RelativeLayout
    android:id="@+id/myrellayout"
    android:width="whatever"
    android:height="whatever"
    />

【讨论】:

  • @MacD 不要指责杰米对你投反对票。以 125 代表授予拒绝投票的特权。此外,我看不到您的回答有任何反对意见。
猜你喜欢
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 2012-07-09
  • 2013-12-18
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多