setContentView删除我的活动上的其他组件

时间:2017-05-15 18:54:59

标签: java android xml

我目前正在尝试在屏幕上的两个点之间添加一条线,当我应用内容视图并且它删除以前的内容并且仅应用该线时会出现问题。目前我的活动的.xml文件中有一个图像,一个复选框和一个textview,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:foreground="?android:attr/selectableItemBackground">

    <ImageView
        android:id="@+id/mapa"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:adjustViewBounds="true"
        android:scaleType="fitXY"
        android:src="@drawable/mapau" />
    <ImageView
        android:id="@+id/pointer"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/pointer"
        android:visibility="gone"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/tv"
        android:layout_centerInParent="true"
        android:layout_gravity="bottom"/>

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="false"
        android:duplicateParentState="false"
        android:text="Disponible"
        android:textSize="20sp"
        android:onClick="onCheckboxClicked"
        android:theme="@style/WhiteCheck"/>
</FrameLayout>

我正在使用java类添加所述行并在我的onStart protected void内的主代码中调用它:

drawView = new DrawView(this);
setContentView(drawView);

我正在使用的java类:

package com.example.vitto.udlc;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class DrawView extends View {
    Paint paint = new Paint();

    public DrawView(Context context) {
        super(context);
        paint.setColor(Color.BLACK);
    }

    @Override
    public void onDraw(Canvas canvas) {
        canvas.drawLine(0, 0, 200, 200, paint);
        canvas.drawLine(200, 0, 0, 200, paint);
    }

}

我对android studio相当新,所以我显然在寻找一些东西,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

嗯,我认为你必须使用:

setContentView(R.layout.yourlayout); //all this code in your activity
DrawView drawView= new DrawView(this);
ViewGroup frameLayout = (ViewGroup) findViewById(R.id.content);

drawView.setLayoutParams(new 
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, 
FrameLayout.LayoutParams.WRAP_CONTENT));
frameLayout.addView(drawView);

通过这种方式,您可以在背景上设置布局,然后在布局上添加线条。

答案 1 :(得分:0)

你可能不会&#34;删除&#34;旧的组件,问题的可能性更大的原因是画布占据整个屏幕,当你绘制它时,它会掩盖它背后的一切。

打开层次结构查看器,查看画布是否覆盖旧元素,如果有,则现在知道问题的根源。以下是有关如何使用层次结构查看器的链接:https://developer.android.com/studio/profile/hierarchy-viewer.html

画布&#34; onDraw&#34>会发生什么?方法被调用,它是否会生成画布,然后每次调用onDraw方法时都会绘制它,这会将它带到前面,所以除非你以某种方式告诉其他ui元素被带到前面,所以会变得模糊不清。

您还可以通过仅使画布透明来检查画布是否遮挡它,在onDraw方法中尝试此代码:

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.OVERLAY);