如何构建此方案?
我想构建一个游戏,其中游戏板是由自定义视图控制但在ScrollView中的画布。游戏板可能比屏幕大得多,我想缩放,滚动游戏。但是,我希望游戏板外的UI的所有优点都包括Buttons,TextViews,ImageViews等。
这是我想象的应该工作的大纲代码。我错误地认为我可以同时使用它们 我自己的onDraw和期望按钮和其他小部件由Android管理?我必须实施 我所有的UI?只是试图处理一个Button(见下文)让我失望这里是XML,我希望我的自定义视图被其他UI元素包围。
我已经查看了很多其他示例和教程,但还没有看到自定义视图放置了包含UI元素的活动。
// Activity
public class gameStartActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
}
}
// gameView.java
public class gameView extends View {
public gameView(Context context) {
super(context);
setFocusable(true); //necessary for getting the touch events
InitBoardView();
}
private void InitBoardView(){
Button myButton = (Button)findViewById(R.id.editname);
-----> fails at this point as myButton is null
myButton.setOnClickListener(doSomething);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(face, getPaddingLeft(), getPaddingTop(),paint);
}
@Override
protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
setMeasuredDimension(xSize, ySize);
}
<ScrollView
android:layout_width="240dp"
android:layout_height="600dp"
<com.android.example.game.gameView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</ScrollView>
<TextView
android:id="@+id/sometext
android:layout_width="120dp"
android:layout_height= "wrap_content"
android:layout_weight="1"
android:visibility="gone"/>
<Button
android:id="@+id/editname"
android:text="DoIt"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</Button>
答案 0 :(得分:0)
findViewById()仅在以下情况下才能在自定义视图中使用: - 从ViewGroup(或ViewGroup的另一个子类)扩展 - Button是自定义视图的子项
更好的方法是在Activity中找到按钮并在其中设置其监听器。您还可以在自定义视图中使用setButton(按钮视图)方法,并让活动执行以下操作:
((MyCustomView) findViewById(R.id.myCustomView)).setButton((Button) findViewById(R.id.myButton));