基本的に、ビューがボタンとサーフェス ビューで構成されるシステムを実装しています。このサーフェス ビューは、メイン アクティビティのクラス内でプログラムによって定義されます。これを独自のタグとして xml ファイルの一部として追加する必要があります。
現在の xml コードは次のとおりです。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/downbutton"
android:layout_width="100dip"
android:layout_height="75dip"
android:layout_alignLeft="@+id/upbutton"
android:layout_centerVertical="true"
android:text="Down" />
<Button
android:id="@+id/rightbutton"
android:layout_width="100dip"
android:layout_height="75dip"
android:layout_alignBottom="@+id/leftbutton"
android:layout_marginLeft="80dp"
android:layout_toRightOf="@+id/upbutton"
android:text="Right" />
<Button
android:id="@+id/leftbutton"
android:layout_width="100dip"
android:layout_height="75dip"
android:layout_above="@+id/downbutton"
android:layout_marginRight="80dp"
android:layout_toLeftOf="@+id/upbutton"
android:text="Left" />
<Button
android:id="@+id/upbutton"
android:layout_width="100dip"
android:layout_height="75dip"
android:layout_above="@+id/rightbutton"
android:layout_centerHorizontal="true"
android:text="Up" />
<com.example.gui.GridSurfaceView
android:id="@+id/gridsurfaceview"
android:layout_width="fill_parent"
android:layout_height="300dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="#cbfff4" />
</RelativeLayout>
ここで、「com.example.gui.GridSurfaceView」はサーフェス ビュー クラスを指します。ただし、サーフェス ビュー クラスはメイン アクティビティのクラス内に配置されており、削除できません (サーフェス ビュー クラスでは、そのアクティビティからのいくつかの変数にアクセスする必要があるため)。サーフェス ビューに独自のクラスがある場合、ビューは正常に表示されましたが、現在、この xml がいくつかの問題を引き起こしています。xml を変更してサーフェス ビューを再度含めるにはどうすればよいですか?
編集 - さて、尋ねられたので、ここにもアクティビティコードがあります。コードが大きすぎるため、サーフェス ビューを含むアクティビティの一部を含めました。メイン アクティビティの名前は「Robotremote」で、SurfaceView は「GridSurfaceView」であることに注意してください。
public class GridSurfaceView extends SurfaceView implements Runnable {
SurfaceHolder GridSurfaceHolder;
Thread gridThread = null;
boolean isRunning = false;
Paint paint;
Typeface mFont = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
Paint red;
public GridSurfaceView(Context context) {
// TODO Auto-generated constructor stub
super(context);
paint = new Paint();
paint.setTextSize(14);
paint.setTypeface(mFont);
paint.setAntiAlias(true);
red = new Paint();
red.setColor(getResources().getColor(R.color.position));
GridSurfaceHolder = getHolder();
gridThread = new Thread(this); //allows for the usage of the run method of this class.
gridThread.start();
}
public void pause(){
isRunning = false;
while(true){
try {
gridThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
gridThread = null;
}
public void resume(){
isRunning = true;
gridThread = new Thread(this);
gridThread.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
while(isRunning){
if(!GridSurfaceHolder.getSurface().isValid())
continue;
Canvas gridcanvas = GridSurfaceHolder.lockCanvas();
gridtobedrawn = com.example.gui.Robotremote.getGrid();
paint.setColor(Color.BLACK);
paint.setStrokeWidth(3);
gridcanvas.drawRect(130, 130, 180, 180, paint);
gridtobedrawn.draw(gridcanvas, paint);
gridcanvas.drawCircle(xCoord, yCoord, (30*0.45f), red);
}
}
}