2016-09-24 10 views
0

ゲームを作成しようとしていて、カウントダウンタイマーを設定しようとしています。 これは私のウェルカムページクラスで、ゲームを開始するボタンとカウントダウンタイマーが含まれています。テキストビューを使用してサーフェスビューキャンバスにカウントダウンを作成する方法

public class WelcomePage extends Activity { 

Spinner timerValueSpinner; 


String[] timeValues; 
Resources resourcePointer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature (Window. FEATURE_NO_TITLE); 
    setContentView(R.layout.welcome_page); 

    timerValueSpinner = (Spinner)this.findViewById(R.id.secondsSpinner); 



    resourcePointer = getResources(); 
    timeValues = resourcePointer.getStringArray(R.array.seconds_list); 



    launchButton(); 

} 

public void launchButton(){ 
Button button1 = (Button) findViewById(R.id.button1); 
button1.setOnClickListener(new OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(WelcomePage.this,Main.class); 


     if(timerValueSpinner.getSelectedItemPosition() > -1){ 
      int parsedSpinnerValue = 0; 
      parsedSpinnerValue = Integer.parseInt(timeValues[timerValueSpinner.getSelectedItemPosition()]); 

      if(parsedSpinnerValue > 0){ 
       intent.putExtra("TimeValue", parsedSpinnerValue); 
       startActivity(intent); 
      } 

     } 
    } 

}); 


    } 

これは、私がカウントダウンタイマーを示すTextViewを置くメインクラスです。

public class Main extends Activity { 

Countdown timer; 
TextView statusTextVie; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature (Window. FEATURE_NO_TITLE); 
    setContentView(new GameView(this)); 
    Bundle extras = getIntent().getExtras(); 
    int timeVal = extras.getInt("TimeValue", 0); 

statusTextVie = (TextView)this.findViewById(R.id.timerVie); 
if (timeVal > 0){ 
     if(timer != null){ 
      timer.cancel(); 
     } 
     timer = new Countdown((timeVal + 1) * Countdown.oneSecond, Countdown.oneSecond,statusTextVie); 



     timer.start(); 
} 

setContentView(新しいGameView(this))に問題があります。私は、WelcomePageクラスから再生ボタンを押します。 App stop and show "残念ながら、(App Name)has stopped" setContentView(R.layout.activity_main)に変更すると、アプリは機能しますが、カウントダウンタイマーとゲームは表示されません。

これは私のGameViewクラスであり、表面ビューを含んでいます。

public class GameView extends SurfaceView { 



private SurfaceHolder holder; 
private GameLoopThread gameLoopThread; 
private List<Sprite> sprites = new ArrayList<Sprite>(); 
private long lastClick; 
private Bitmap bmpExplode; 
private List<TempSprite> temps = new ArrayList<TempSprite>(); 

private SoundPool sounds; 
private int booms; 
private int msprite=30; 
Countdown timer; 

TextView statusTextVie = (TextView)this.findViewById(R.id.timerVie); 
String text = statusTextVie.getText().toString(); 


public GameView(Context context) { 
    super(context); 


    gameLoopThread = new GameLoopThread(this); 
    holder = getHolder(); 
    holder .addCallback(new Callback() { 

     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) { 
      boolean retry = true; 
      gameLoopThread.setRunning(false); 

      while (retry){ 
       try{ 
        gameLoopThread.join(); 
        retry= false; 
       }catch (InterruptedException e){ 
       } 
      } 
     } 

     @Override 
     public void surfaceCreated(SurfaceHolder holder) { 

      createSprites(); 
      gameLoopThread.setRunning(true); 
      gameLoopThread.start(); 




     } 

     @Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} 
    }); 
    bmpExplode = BitmapFactory.decodeResource(getResources(), R.mipmap.deadline); 
    sounds= new SoundPool(10,AudioManager.STREAM_MUSIC,0); 
    booms=sounds.load(context,R.raw.boom,1); 


} 
private void createSprites() { 

    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
    sprites.add(createSprite(R.mipmap.b1)); 
     sprites.add(createSprite(R.mipmap.b2)); 
     sprites.add(createSprite(R.mipmap.b3)); 
     sprites.add(createSprite(R.mipmap.b4)); 
     sprites.add(createSprite(R.mipmap.b5)); 
     sprites.add(createSprite(R.mipmap.b6)); 
     sprites.add(createSprite(R.mipmap.b2)); 
     sprites.add(createSprite(R.mipmap.b3)); 
     sprites.add(createSprite(R.mipmap.b4)); 
     sprites.add(createSprite(R.mipmap.b5)); 
     sprites.add(createSprite(R.mipmap.b6)); 

} 
private Sprite createSprite(int resouce) { 
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), resouce); 
    return new Sprite(this,bmp); 

}

@SuppressLint("WrongCall") 
@Override 
protected void onDraw (Canvas canvas) { 

    canvas.drawColor (Color. BLACK); 

    for (int i = temps.size() - 1; i >= 0; i--) { 
     temps.get(i).onDraw(canvas); 
    } 
    for (Sprite sprite : sprites) { 
     sprite.onDraw(canvas); 
} 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (System.currentTimeMillis() - lastClick > 300) { 
     lastClick = System.currentTimeMillis(); 
    synchronized (getHolder()) { 
      float x=event.getX(); 
      float y=event.getY(); 
     for (int i = sprites.size()-1; i >= 0; i--) { 
      Sprite sprite = sprites.get(i); 
      if (sprite.isCollition(x,y)) { 
       if (i < msprite){ 
        msprite--; 
        sounds.play(booms, 1.0f, 1.0f, 0,0, 1.5f); 
       } 
        sprites.remove(sprite); 

        temps.add(new TempSprite(temps, this, x, y, bmpExplode)); 
        break; 
      } 
     }} 
    } 
     return true; 
} 
} 

どのように私はsurfaceviewキャンバス

答えて

0

カウントダウンタイマーの使用このライブラリをして、メインクラスからのTextViewを入れてください。 https://github.com/iwgang/CountdownView

のGradle

compile 'com.github.iwgang:countdownview:2.1.2' 

コード

CountdownView mCvCountdownView = (CountdownView)findViewById(R.id.cv_countdownViewTest1); 
mCvCountdownView.start(995550000); // Millisecond 

// or 
for (int time=0; time<1000; time++) { 
    mCvCountdownView.updateShow(time); 
} 

レイアウト

<cn.iwgang.countdownview.CountdownView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:isHideTimeBackground="true" 
    app:isShowDay="true" 
    app:isShowHour="true" 
    app:isShowMinute="true" 
    app:isShowSecond="true" 
    app:isShowMillisecond="true" 
    app:timeTextColor="#000000" 
    app:timeTextSize="22sp" 
    app:isTimeTextBold="true" 
    app:suffixGravity="bottom" 
    app:suffixTextColor="#000000" 
    app:suffixTextSize="12sp" 
    app:suffixHour="时" 
    app:suffixMinute="分" 
    app:suffixSecond="秒" 
    app:suffixMillisecond="毫秒" /> 
関連する問題