0
嵌套SurfaceView類我有一個延伸SurfaceView這樣一個類中的一類:鏈接中的XML
MainActivity.java
public class MainActivity extends Activity implements OnTouchListener {
SurfaceTest mySurface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.surface);
mySurface = (SurfaceTest) findViewById(R.layout.surface);
mySurface.setOnTouchListener(this);
}
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
// TODO Auto-generated method stub
// ... some code ...
return true;
}
public class SurfaceTest extends SurfaceView implements Runnable {
SurfaceHolder myHolder;
public SurfaceTest(Context context) {
super(context);
// TODO Auto-generated constructor stub
myHolder = getHolder();
}
public SurfaceTest(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
myHolder = getHolder();
}
public SurfaceTest(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
myHolder = getHolder();
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
if (!myHolder.getSurface().isValid()) {
continue;
}
Canvas canvas = myHolder.lockCanvas();
//...some code...
myHolder.unlockCanvasAndPost(canvas);
}
}
}
}
surface.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.testsurfaceview.MainActivity.SurfaceTest
android:id="@+id/surfaceView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</FrameLayout>
我在這個XML文件的圖形佈局中有一個錯誤,說
"The following classes could not be instantiated:
- com.example.testsurfaceview.MainActivity.SurfaceTest"
一個爲我工作可能的解決方案是爲SurfaceTest
類,然後在XML文件中使用com.example.testsurfaceview.SurfaceTest
創建新類。
但問題再次是我用onTouch
事件的很多信息,它用於在run()
方法中畫在畫布上。這是我實現內部MainActivity
所以SurfaceTest
類的原因,我有兩個選擇現在:
1)使嵌套SurfaceTest類 2)創建新的SurfaceTest類XML的工作,並通過在onTouch
獲得的所有信息使用意圖。
你有什麼建議?
所以,我把所有的'變量'和'onTouch'事件放在不同的'SurfaceTest'類中......好吧..我會馬上回來讓你知道結果。 :)感謝您的建議@Karan –
我在執行上述設置時陷入了一個更多的問題,正如您所說,我創建了一個新的不同類「SurfaceTest」,並在MainActivity中聲明瞭SurfaceTest mySurface; onCreate()'mySurface = new SurfaceTest(this);'但是mySurface.setOnTouchListener(this)怎麼辦?'現在放哪裏?對不起,我對Android編程不太瞭解。 –
將SurfaceTest類添加到MainActivty xml文件中(對於哪個區域需要表面對象移動)並從MainActivity類中移除SurfaceTest的所有聲明。 –