2013-05-28 51 views
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獲得的所有信息使用意圖。

你有什麼建議?

回答

1

在您的包中創建一個名爲SurfaceTest的不同類文件,然後將其添加到您的xml文件中。它一定會奏效。將onDraw(Canvas canvas)onTouchEvent(MotionEvent event)添加到您的Surface View class中。

+0

所以,我把所有的'變量'和'onTouch'事件放在不同的'SurfaceTest'類中......好吧..我會馬上回來讓你知道結果。 :)感謝您的建議@Karan –

+0

我在執行上述設置時陷入了一個更多的問題,正如您所說,我創建了一個新的不同類「SurfaceTest」,並在MainActivity中聲明瞭SurfaceTest mySurface; onCreate()'mySurface = new SurfaceTest(this);'但是mySurface.setOnTouchListener(this)怎麼辦?'現在放哪裏?對不起,我對Android編程不太瞭解。 –

+0

將SurfaceTest類添加到MainActivty xml文件中(對於哪個區域需要表面對象移動)並從MainActivity類中移除SurfaceTest的所有聲明。 –