无法将SurfaceViewExample链接到MainActivity

时间:2012-03-25 08:01:53

标签: android

在DrawingTheBall类中制作一些动画内容.. 在SUrfaceViewExample类中,Touchevent将被检测到.. 我的问题是我无法链接MainActivity和SurtfaceViewExample .. DrawingTheBall没有问题.. 主要课程:......

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();
  }


}
}

2 个答案:

答案 0 :(得分:0)

你的问题不明确。你想要链接什么? 你想从另一个开始活动吗? 或者您想将一些参数从一个参数传递给另一个活动?

如果要从Main活动运行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");

如果这还不够,请告诉我实际需要什么。

享受..

答案 1 :(得分: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代码。 玩得开心......