Рисунок на экране с другими видами в Android
-
16-10-2019 - |
Вопрос
Я искал последние несколько часов на ответ на очень тупой вопрос. Я знаю, как нарисовать на холсте в Android, если вы расширяете класс View, изменяете ONDRAW и Set SetContentView () на новый экземпляр этого класса. Тем не менее, мне также нужно иметь 2 TextView и 2 EditTexts в нижней части деятельности, и если SetContentView () установлен только для того, чтобы иметь только это представление, эти представления, очевидно, не будут отображаться. Как поставить все это на экране?
РЕДАКТИРОВАТЬ: Вот мой код: (Имя пакета 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"/>
Решение
По сути, вам нужно определить свой XML -файл с помощью класса пользовательского представления и других виджетов, которые у вас есть. В вашем случае будет пользовательское представление, 2 TextViews и 2 EditTexts в файле XML.
Вы определяете пользовательское представление в XML, как и любой другой виджет, за исключением того, что используете пространство имен представления и имя класса.
<com.example.android.myCustomView
android:id="@+id/my_custom_view"
...
Тогда внутри вашей деятельности простой звонок
setContentView(R.layout.main);
РЕДАКТИРОВАТЬ: Проблема в том, что ваш класс является личным, так что он «не виден», когда ваша деятельность делает вызов макету и пытается его раздуть.
EDIT2: Конечно, это не сработает, вы используете внутренний класс! Вы должны общаться с такими вещами, если вы ожидаете получить ответы.
Синтаксис XML для внутреннего класса отличается.
<view class="com.example.android.MyClass$MyInnerClass"
Другие советы
Вы должны быть в состоянии использовать класс, который вы расширили в своем res/layout/main.xml, как и любой другой класс представления, и добавить свой текст и редакции в файл Mayout .xml, как обычно. Я лично этого не сделал, но я использовал уроки пользовательского просмотра таким образом.
Затем для вашего SetContentView вы просто используете файл Mayout .xml, подобный:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
...