基本上,我正在实现一个系统,其中视图由按钮和表面视图组成。这个表面视图是在主要活动的类中以编程方式定义的。现在我需要将其添加为 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”,表面视图是“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);
}
}
}