2015-10-04 118 views
0

首先,我对Android非常陌生。可能会有一些愚蠢的错误,请纠正你看到的错误。自定义视图到现有视图

我遇到的问题是添加一个视图到现有的视图。有一个按钮,你可以按下应该减少一个值。如果我把它们放在单独的片段中,它会起作用,但是我想要一个片段来处理所有片段。问题发生在Playfield,它的onCreateView方法。

addView(pc.getView(getActivity())); // this I know is the error, but absolutely no clue of how to solve it.这就是我想要完成的。我想直接将该视图添加到当前视图中。

我试着添加另一个小部件,并给它这个视图的属性,但是失败了。

fragment_playfield.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="30dp" 
     android:text="@string/fire_button" /> 

</RelativeLayout> 

赛场

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 

public class Playfield extends Fragment 
{ 
    private View view; 

    private PowerComponent pc = new PowerComponent();; 

    private final static int BUTTON_FIRE = R.id.button1; 
    private Button buttonFire; 

    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {   

     view = inflater.inflate(R.layout.fragment_playfield, container, false); 

     addView(pc.getView(getActivity())); // this I know is the error, but absolutely no clue of how to solve it. 

     buttonFire = (Button) view.findViewById(BUTTON_FIRE); 
     buttonFire.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       fire(); 
      } 
     }); 

     return view; 
    } 

    private void fire() { 
     if (pc.firePower()) { 
      System.exit(0); 
     } 
    } 
} 

PowerComponent

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.view.View; 

public class PowerComponent 
{ 
    private PowerComponentView view; 

    private static final int POWER_MAX   = 100; 
    private static int power     = POWER_MAX; 

    public View getView (Activity activity) { 
     view = new PowerComponentView(activity); 
     return view; 
    } 

    public boolean firePower() { 
     if (power < 5) { 
      return false; 
     } 

     power -= 5; 
     view.invalidate(); 
     return true; 
    } 


    private class PowerComponentView extends View 
    { 
     /** 
     * Power GUI 
     */ 
     private final Paint paint    = new Paint(); 
     private final int GUI_BAR_X    = 100; 
     private final int GUI_BAR_Y    = 10; 
     private final int GUI_BAR_HEIGHT  = 30; 
     private final int GUI_BAR_WIDTH_MAX  = 200;  

     private final Rect powerFrame = new Rect (GUI_BAR_X-1, GUI_BAR_Y-1, GUI_BAR_X + GUI_BAR_WIDTH_MAX+1, GUI_BAR_HEIGHT+1); 
     private final Rect powerBar = new Rect (GUI_BAR_X, GUI_BAR_Y, GUI_BAR_X + GUI_BAR_WIDTH_MAX, GUI_BAR_HEIGHT); 

     /** 
     * 
     * @param context 
     */ 
     public PowerComponentView (Context context) { 
      super (context); 
     } 

     @Override 
     public void onDraw (Canvas canvas) { 
      super.onDraw(canvas); 

      // Frame 
      paint.setColor (Color.BLACK); 
      canvas.drawRect (powerFrame, paint); 

      // Bar 
      paint.setColor (Color.rgb (255, 255, 0)); 
      powerBar.right = GUI_BAR_X + (int)(((double)power/(double)POWER_MAX) * (double)GUI_BAR_WIDTH_MAX); 
      canvas.drawRect (powerBar, paint); 
     } 
    } 
} 

在p问题是我无法将从我的PowerComponent.getView()返回的View添加到我目前的View

+0

您正在使用'pc.getView',但在您的代码中我没有看到任何您初始化它的地方!另外,你是否得到任何错误或什么?你可以提供logcat – Mithun

+0

'PowerComponent pc = new PowerComponent();'它应该是什么,更新问题以反映这一点。不,没有错误,因为我被困在如何继续。 – Emz

+0

您可以尝试'view.addView(pc.getView(getActivity()));'因为您需要将'PowerComponent'附加到'Fragment',其中'View'充满了片段 – Mithun

回答

1

片段类没有addView()方法。 addView是ViewGroup类的一个方法。使用:

container.addView() 
+0

那简单吧?我知道'Fragment'不支持'addView(...)',因此我将该行标记为包含错误的行。我不知道如何完成我想要的东西。谢谢。 – Emz