2012-03-25 82 views
0

在DrawingTheBall類製作一些動畫的東西。在SUrfaceViewExample類的TouchEvent將detecetd .. 我的問題是我不能夠MainActivity和SurtfaceViewExample .. 沒有任何問題與DrawingTheBall鏈接。 主類:。...無法SurfaceViewExample 鏈接到MainActivity

package maddy.first; 
import android.app.Activity; 
import android.os.Bundle; 
public class Madhu1Activity extends Activity { 

/** Called when the activity is first created. */ 
    Drwwingtheball v; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
      v = new Drawingtheball(this); 
      setContentView(v); 
     } 
} 

CLASS SurfaceViewExample:

package maddy.first; 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public class SurfaceViewExample extends Activity implements OnTouchListener{ 

    OurView v; 
    Bitmap ball; 
    float x,y; 
     @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      v=new OurView(this); 
      v.setOnTouchListener(this); 
    ball=BitmapFactory.decodeResource(getResources(),R.drawable.tennis_ball); 
      x = y = 0; 
      setContentView(v); 
     } 
    @Override 
    protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    v.resume(); 
    } 
public class OurView extends SurfaceView implements Runnable{ 
    Thread t; 

    SurfaceHolder holder; 

    boolean isItOk=false; 

    public OurView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
      holder=getHolder(); 
     } 


public void run() { 

    // TODO Auto-generated method stub 

    while(isItOk ==true) 
    { 
    //drawing 
    if(holder.getSurface().isValid()) { 

     continue; 

    } 

    Canvas c=holder.lockCanvas(); 
    c.drawARGB(255,150,150,10);  
    c.drawBitmap(ball, x-(ball.getWidth()), y-(ball.getHeight()), null); 

    holder.unlockCanvasAndPost(c);  

    } 
} 
public void pause() 
{ 
    isItOk=false; 
    while(true) { 
     try { 
      t.join(); 
     }catch(InterruptedException e) { 

      e.printStackTrace(); 

     } 
     break; 

    } 
} 

public void resume() 
{ 
    isItOk=true; 
    t=new Thread(this); 
    t.start(); 
} 

    } 
    public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    return false; 
    } 


} 

類DrawingTheBall:

package maddy.first; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.view.View; 
public class DrawingTheBall extends View { 

    Bitmap bball; 
    int x,y; 
public DrawingTheBall(Context context) { 
     super(context); 

    bball=BitmapFactory.decodeResource(getResources() ,R.drawable.tennis_ball); 
     x = 0; 
     y = 0; 
     } 
protected void onDraw(Canvas canvas) 
    { 
super.onDraw(canvas); 
    Rect ourRect=new Rect(); 
    ourRect.contains(0, 0,canvas.getWidth(),canvas.getHeight()/2); 
    Paint blue=new Paint(); 
    blue.setColor(Color.RED); 
    blue.setStyle(Paint.Style.FILL); 
    canvas.drawRect(ourRect, blue); 
    if(x < canvas.getWidth()) 
    x+=10; 
    else 
     x=0; 
    if(y<canvas.getHeight()) 
    y+=10; 
    else 
     y=0; 
    Paint p=new Paint(); 
    canvas.drawBitmap(bball,x,y,p); 
    invalidate(); 
    } 


} 
} 

回答

0

你的問題不清楚。你想要鏈接什麼? 你想從另一個人開始活動? 或者你想傳遞一個參數到另一個活動?

如果你想從主要業務運行SurfaceViewExample活動 - 這是代碼 -

startActivity(new Intent(this, SurfaceViewExample.class) 
finish(); 

而且AndroidManifest.xml文件應該是 -

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name="Madhu1Activity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="SurfaceViewExample"></activity> 
</application> 

如果你想傳遞參數從一個活動到另一個 - 這是代碼 -

startActivity(new Intent(this, SurfaceViewExample.class) 
    .putExtra("key", [value])); // if you want to pass class the class should be Serializable, otherwise you can pass value like a hash map. 

//in other activity convert it to class- 
<classname> obj = (<classname>)getIntent().getSerializableExtra("key"); 

如果這還不夠,那麼告訴我究竟需要什麼。

享受..

+0

我粘貼:startActivity(新意圖(這一點,SurfaceViewExample.class) 完成();在主要業務,但它並沒有worked.I要運行特別SurfaceViewExample class.please幫我@Suvam羅伊 – user1290992 2012-03-25 09:52:31

0

我認爲它會引發一些例外,否則你的佈局有一定的誤差,所以它是無法設置內容視圖。 這是保持SurfaceViewExample類作爲主要活動遵循它的最簡單的方法 - 轉到應用程序的AndroidManifest.xml文件,然後 -

Application tab -> select launch activity(that is your main activity) -> 
Name*(right side) -> browse(take for a while to loading activity list) - > 
select SurfaceViewExample -> remove previous SurfaceViewExample activity if already added. 

在SurfaceViewExample的setContentView(layout.main)設置一個默認的佈局; //如果存在 並運行你的應用程序來檢查它是否能夠顯示你的佈局。 如果它可以成功運行,那麼請查看您的DrawingTheBall代碼。 玩得開心......

+0

非常感謝Suvam :) – user1290992 2012-03-26 15:34:25