2017-05-06 82 views
0

我有一個與我的表面視圖添加到線性佈局的問題,我已經嘗試了已經可用的答案,仍然不能似乎弄清楚。我的目標是在點擊下一個按鈕時在我的登錄屏幕底部呈現動畫。我嘗試在屏幕上添加線性佈局,然後將我的gameView對象添加到該屏幕上。表面視圖和線性佈局和onClick事件

這是loginActivity和遊戲視圖類爲了清晰我還添加了xml。

`package com.example.Combat; 

    import android.app.Activity; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.graphics.*; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.*; 
    import android.widget.LinearLayout; 
    import android.widget.TextView; 

    public class MyActivity extends Activity { 
     /** 
     * Called when the activity is first created. 
     */ 

     public GameView gameView; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      //setting the font 

      Typeface myTypeFace = Typeface.createFromAsset(getAssets(),"Typo Oxin free promo.ttf"); 
      TextView myTextView = (TextView) findViewById(R.id.nameTextView); 
      myTextView.setTypeface(myTypeFace); 



      gameView = new GameView(this); 

    //  LinearLayout.LayoutParams lp =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
    //  lp.gravity= Gravity.BOTTOM; 


      LinearLayout myLayout = new LinearLayout(this); 
      myLayout.findViewById(R.id.gameLayoutView); 
      myLayout.addView(gameView); 


     } 

     @Override 

     public void onResume(){ 
      super.onResume(); 
      gameView.resume(); 
     } 

     @Override 

     protected void onPause(){ 
      super.onPause(); 
      gameView.pause(); 
     } 




     public void beginMotion(View view) { 

      GameView.isMoving=!GameView.isMoving; 

      // startActivity(new Intent(getApplicationContext(),transitionActivity.class)); 
     } 





    } 
    ` 


     package com.example.Combat; 

    import android.content.Context; 
    import android.graphics.*; 
    import android.util.Log; 
    import android.view.MotionEvent; 
    import android.view.SurfaceHolder; 
    import android.view.SurfaceView; 

    /** 
    * Created by vmuser on 2017/05/05. 
    */ 
    public class GameView extends SurfaceView implements Runnable{ 

     private Thread gameThread; 
     private SurfaceHolder ourHolder; 
     public static volatile boolean playing=false; 
     private Canvas canvas; 
     private Bitmap bitmapRunningMan; 
     public static boolean isMoving=false; 
     private float runSpeedPerSecond = 150; 

     //LinearLayout screen=(LinearLayout)findViewById(R.id.theScreen); 



     private float manXPos = 1020, manYPos = 950; 
     private int frameWidth = 230, frameHeight = 274; 
     private int frameCount = 6; 
     private int currentFrame = 0; 
     private long fps; 
     private long timeThisFrame; 
     private long lastFrameChangeTime = 0; 
     private int frameLengthInMillisecond = 60; 

     private Rect frameToDraw = new Rect(0, 0, frameWidth, frameHeight); 
     private RectF whereToDraw = new RectF(manXPos, manYPos, manXPos + frameWidth, frameHeight); 

     public GameView(Context context) { 
      super(context); 
      ourHolder = getHolder(); 
      bitmapRunningMan = BitmapFactory.decodeResource(getResources(), 
        R.drawable.perfectsoldier); 
      bitmapRunningMan = Bitmap.createScaledBitmap(bitmapRunningMan, 
        frameWidth * frameCount, frameHeight, false); 



     } 

     @Override 
     public void run() { 
      while (playing) { 
       long startFrameTime = System.currentTimeMillis(); 
       update(); 
       this.draw(); 

       Log.d("theOne","its Happennig"); 

       timeThisFrame = System.currentTimeMillis() - startFrameTime; 

       if (timeThisFrame >= 1) { 
        fps = 1000/timeThisFrame; 
       } 
      } 
     } 

     public void update() { 
      if (isMoving) { 
       manXPos = manXPos - runSpeedPerSecond/fps; 



       if (manXPos > 0) { 
        //manYPos += (int) frameHeight; 
        //manXPos = 10; 

        isMoving=false; 
       } 

       if (manYPos + frameHeight > 0) { 
        // manYPos = 10; 
        isMoving=false; 
       } 
      } 
     } 


     public void manageCurrentFrame() { 
      long time = System.currentTimeMillis(); 

      if (isMoving) { 
       if (time > lastFrameChangeTime + frameLengthInMillisecond) { 
        lastFrameChangeTime = time; 
        currentFrame++; 

        if (currentFrame >= frameCount) { 
         currentFrame = 0; 
        } 
       } 
      } 

      frameToDraw.left = currentFrame * frameWidth; 
      frameToDraw.right = frameToDraw.left + frameWidth; 
     } 

     public void draw() { 
      if (ourHolder.getSurface().isValid()) { 
       canvas = ourHolder.lockCanvas(); 
       canvas.drawColor(Color.WHITE); 
       whereToDraw.set((int) manXPos, (int) manYPos, (int) manXPos 
         + frameWidth, (int) manYPos + frameHeight); 
       manageCurrentFrame(); 
       canvas.drawBitmap(bitmapRunningMan, frameToDraw, whereToDraw, null); 
       ourHolder.unlockCanvasAndPost(canvas); 
      } 
     } 


     public void pause() { 
      playing = false; 

      try { 
       gameThread.join(); 
      } catch(InterruptedException e) { 
       Log.e("ERR", "Joining Thread"); 
      } 
     } 

     public void resume() { 
      playing = true; 
      gameThread = new Thread(this); 
      gameThread.start(); 
     } 

    // public boolean onTouchEvent(MotionEvent event) { 
    //  switch (event.getActionMasked() & MotionEvent.ACTION_MASK) { 
    //   case MotionEvent.ACTION_DOWN : 
    //    isMoving = !isMoving; 
    //    break; 
    //  } 
    // 
    //  return true; 
    // } 




    } 


    <?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:focusableInTouchMode="true" 
       android:color="#000000" 
       android:weightSum="1" android:background="#ffffff" android:orientation="vertical" 
       android:id="@+id/theScreen"> 
    <ImageView 
      android:layout_width="113dp" 
      android:layout_height="130dp" 
      android:src="@drawable/thelogo" 
      android:id="@+id/imageView" android:layout_gravity="center_horizontal"/> 
    <TextView 
      android:layout_width="145dp" 
      android:layout_height="49dp" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="combat" 
      android:textSize="30sp" 
      android:textColor="#000000" 

      android:id="@+id/nameTextView" android:layout_gravity="right" android:layout_weight="0.06"/> 
    <EditText 
      android:layout_width="270dp" 
      android:layout_height="wrap_content" 
      android:hint="Username" 
      android:textColorHint="#808080" 
      android:textColor="#22272a" 
      android:id="@+id/userNameEditText" android:layout_gravity="center_horizontal"/> 
    <Button 
      android:layout_width="261dp" 
      android:layout_height="wrap_content" 
      android:text="Next" 
      android:drawableRight="@drawable/thearrow" 
      android:textColor="#000000" 
      android:onClick="beginMotion" 
      android:id="@+id/NextButton" android:layout_gravity="center_horizontal" android:background="#638455" 
    /> 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Create an account" 
      android:id="@+id/textView" android:layout_gravity="center_horizontal" android:layout_weight="0.07" 
      android:textColor="#22272A"/> 

<LinearLayout 

     android:id="@+id/gameLayoutView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     > 

</LinearLayout> 


</LinearLayout> 

回答

0

您還沒有將myLayout附加到您之前在setContentView(R.layout.main)上設置的活動主佈局。

相反的:

LinearLayout myLayout = new LinearLayout(this); 
myLayout.findViewById(R.id.gameLayoutView); 
myLayout.addView(gameView); 

你應該這樣寫:

LinearLayout myLayout = (LinearLayout) findViewById(R.id.gameLayoutView); 
myLayout.addView(gameView); 
+0

林小有一點迷茫,心不是什麼,LinearLayout中myLayout =新的LinearLayout(本); myLayout.findViewById(R.id.gameLayoutView); myLayout.addView(gameView);應該這樣做,這可能是愚蠢的,但是,將如何附加布局? – KatOfMordor

+0

myLayout.addView(gameView); - 將遊戲視圖添加到線性視圖 myLayout.findViewById(R.id.gameLayoutView); - 用指定的id返回myLayout中的視圖。 您可否將XML文件添加到問題中,以便我可以給出更好的答案 –