gpt4 book ai didi

android - 在 android 中使用其他 View 在屏幕上绘图

转载 作者:行者123 更新时间:2023-11-29 18:22:19 25 4
gpt4 key购买 nike

过去几个小时我一直在寻找一个非常愚蠢的问题的答案。如果您扩展 View 类、修改 onDraw 并将 setContentView() 设置为该类的新实例,我知道如何在 android 的 Canvas 上绘制。但是,我还需要在 Activity 底部有 2 个 TextView 和 2 个 EditText,如果将 setContentView() 设置为仅具有该 View ,那么这些 View 显然不会显示。如何将所有这些都放在屏幕上?

编辑:这是我的代码:(包名是android.physicsengine)

package android.physicsengine;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.RelativeLayout;

public class ResultantForceEngine extends Activity {
private EditText mag;
private EditText dir;
private View image;
private RelativeLayout layout;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.resultant_force);

mag = (EditText)findViewById(R.id.magnitude);
dir = (EditText)findViewById(R.id.direction);
}

public class MyView extends View{
public MyView(Context context){

super(context);
}
public MyView(Context context, AttributeSet attrs){

super(context, attrs);

}
public MyView(Context context, AttributeSet attrs, int defStyle){

super(context, attrs, defStyle);
}

@Override
protected void onDraw(Canvas canvas){
canvas.drawColor(Color.BLACK);
Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
circlePaint.setColor(Color.RED);
canvas.drawLine(canvas.getWidth()/2, canvas.getHeight()/2-200, canvas.getWidth()/2 ,canvas.getHeight()/2+200, circlePaint);
canvas.drawLine(canvas.getWidth()/2-200, canvas.getHeight()/2, canvas.getWidth()/2+200 ,canvas.getHeight()/2, circlePaint);
}
}
}

和 xml

<view class="android.physicsengine.ResultantForceEngine$MyView"
android:id="@+id/image"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView android:id="@+id/magText"
android:text="Magnitude (N) ="
android:textSize="15dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dip"
android:gravity="center_vertical"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true" />
<EditText android:id="@+id/magnitude"
android:inputType="numberDecimal"
android:layout_alignParentBottom="true"
android:layout_toRightOf ="@id/magText"
android:layout_width="wrap_content"
android:padding="3dip"
android:layout_height="wrap_content" />

<TextView android:id="@+id/dirText"
android:text="Angle (deg) ="
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15dip"
android:layout_alignParentBottom="true"
android:layout_toRightOf ="@id/magnitude"
android:padding="3dip"
android:gravity="center_vertical" />
<EditText android:id="@+id/direction"
android:inputType="numberDecimal"
android:layout_alignParentBottom="true"
android:layout_toRightOf ="@id/dirText"
android:layout_alignParentRight="true"
android:layout_height="wrap_content"
android:padding="3dip"
android:layout_width="wrap_content"/>

最佳答案

基本上,您需要使用自定义 View 类和您拥有的其他小部件来定义 XML 文件。在您的情况下,XML 文件中会有自定义 View 、2 个 TextView 和 2 个编辑文本。

除了使用 View 的命名空间和类名外,您可以像任何其他小部件一样在 XML 中定义自定义 View 。

<com.example.android.myCustomView
android:id="@+id/my_custom_view"
...

然后在您的 Activity 中进行一个简单的调用

setContentView(R.layout.main); 

编辑:问题是你的类是私有(private)的,所以当你的 Activity 调用布局并试图膨胀它时,它“看不见”。

Edit2:这当然行不通,您正在使用内部类!如果您希望得到答案,就必须像这样交流。

内部类的 XML 语法不同。

<view class="com.example.android.MyClass$MyInnerClass"

关于android - 在 android 中使用其他 View 在屏幕上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4761262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com