首先,我对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
。
您正在使用'pc.getView',但在您的代码中我没有看到任何您初始化它的地方!另外,你是否得到任何错误或什么?你可以提供logcat – Mithun
'PowerComponent pc = new PowerComponent();'它应该是什么,更新问题以反映这一点。不,没有错误,因为我被困在如何继续。 – Emz
您可以尝试'view.addView(pc.getView(getActivity()));'因为您需要将'PowerComponent'附加到'Fragment',其中'View'充满了片段 – Mithun