【问题标题】:Drawing multiple views inside an Activity在 Activity 中绘制多个视图
【发布时间】:2024-04-29 03:35:02
【问题描述】:

我是 Android 编程的新手,我有一些关于绘图的基本问题。

我有一个通过 .xml 文件显示文本视图的活动,如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView"
        android:textSize="18dp"
        android:textStyle="bold" />

</RelativeLayout>

我想在我的 Activity 中显示几个矩形。为此,我创建了一个扩展 View 的新类。我实例化了这个类并设法在我的 Activity 中显示我的矩形(也许我应该在这里使用布局这个词,我不确定......)。

我创建的类:

public class DrawRectangle extends View {
    Paint paint = new Paint();
    int x,y;
    int length,width;

    public DrawRectangle(Context context,int _x,int _y, int _length, int _width){
        super(context);
        x = _x;
        y = _y;
        length = _length;
        width = _width;

    }

    @Override
    public void onDraw(Canvas canvas) {
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(x, y, x+length, y+length, paint);
    }
}

以及创建 DrawRectangle 类实例的 Activity 内部的函数:

public void drawRectangle(){

    DrawRectangle rectangle = new DrawRectangle(this,100,100,50,50);
    // rectangle.setBackgroundColor(Color.TRANSPARENT);
    setContentView(rectangle);
}

事情是这样的:

  • 矩形已正确绘制
  • 我们再也看不到文本视图了

我尝试创建 DrawRectangle 类的另一个实例,但只能看到一个实例(最后一个要在屏幕上设置)。我认为问题出在这样一个事实,即视图占据了所有位置并被放置在所有事物的前面。所以我尝试使用以下线条将背景颜色更改为透明:

rectangle.setBackgroundColor(Color.TRANSPARENT);

rectangle.setBackgroundColor(Color.parseColor("#00000000");

没有任何错误,但看不到其他矩形或文本视图。

我能做什么?我怀疑对这一切有误解。

谢谢大家!

【问题讨论】:

    标签: android view draw


    【解决方案1】:

    setContentView 中,您必须传递活动的 xml 布局(包含 TextView )。 稍后您可以将其他视图添加到此布局。例如:

    ViewGroup layout = (ViewGroup) findViewById(R.id.your_layout_id);
    TextView tv = new TextView(this);
    tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    tv.setText("Added tv");
    layout.addView(tv);
    

    【讨论】:

    • 谢谢回答。如何获取/知道我的布局 ID?关于 findViewByID(R.id.your_layout_id)。
    • 这是布局xml文件的名称。
    • 我的布局没有任何ID,所以我有点迷茫。现在它正在工作!谢谢!