我是Android應用程序開發的新手,我想問一些問題。將XML RelativeLayout與Surface View結合使用
我有我的SurfaceView內的位圖,我想動畫和以編程方式移動。我也想在屏幕上放一個按鈕來控制位圖的移動。但由於我無法在SurfaceView中放置按鈕,因此我在稱爲main.xml的XML佈局的RelativeLayout中聲明瞭它。
這裏有什麼是我的main.xml內
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/main_layout" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Test Button" />
</RelativeLayout>
所以我想要做的是「組合」(找不到更好的詞)與在我的主要佈局的SurfaceView .XML。
這裏是我的Main.java,我嘗試將佈局與組合/的SurfaceView
package com.src.test.view;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.RelativeLayout;
public class Main extends Activity {
private RelativeLayout _myXmlLayout;
private MyView _myView;
private Button _myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_myXmlLayout = (RelativeLayout) findViewById(R.id.main_layout);
_myView = new MyView(this);
_myButton = (Button) findViewById(R.id.button1);
_myXmlLayout.addView(_myButton);
_myXmlLayout.addView(_myView);
setContentView(_myXmlLayout);
}
}
,但它給了我一個「應用程序已意外停止」錯誤。我做錯了嗎?如果是這樣,你能提出一個更好的實現方法嗎?
您的回覆非常感謝。謝謝!
p.s.沒有位圖動畫代碼和按鈕控制。這只是我目前正在解決的觀點。 :)
編輯:
我修改了代碼,在這裏,它是:
所以這裏是我的編輯Main.java
package com.src.test.view;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
}
}
,這裏是我的main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.src.test.view.MyView
android:id="@+id/myView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<Button
android:text="Test Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left" />
<Button
android:text="Test Button2"
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right" />
</FrameLayout>
我試圖運行它,但它給了我一個錯誤。
這裏的logcat的
(ZygoteInit.java:626)
10-29 01:18:51.046: E/AndroidRuntime(318): at dalvik.system.NativeStart.main(Native Method)
10-29 01:18:51.046: E/AndroidRuntime(318): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.src.test.view.MyView
10-29 01:18:51.046: E/AndroidRuntime(318): at android.view.LayoutInflater.createView(LayoutInflater.java:503)
10-29 01:18:51.046: E/AndroidRuntime(318): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
10-29 01:18:51.046: E/AndroidRuntime(318): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
10-29 01:18:51.046: E/AndroidRuntime(318): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
10-29 01:18:51.046: E/AndroidRuntime(318): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-29 01:18:51.046: E/AndroidRuntime(318): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-29 01:18:51.046: E/AndroidRuntime(318): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
10-29 01:18:51.046: E/AndroidRuntime(318): at android.app.Activity.setContentView(Activity.java:1647)
10-29 01:18:51.046: E/AndroidRuntime(318): at com.src.test.view.Main.onCreate(Main.java:12)
10-29 01:18:51.046: E/AndroidRuntime(318): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-29 01:18:51.046: E/AndroidRuntime(318): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
10-29 01:18:51.046: E/AndroidRuntime(318): ... 11 more
10-29 01:18:51.046: E/AndroidRuntime(318): Caused by: java.lang.NoSuchMethodException: MyView(Context,AttributeSet)
10-29 01:18:51.046: E/AndroidRuntime(318): at java.lang.Class.getMatchingConstructor(Class.java:660)
10-29 01:18:51.046: E/AndroidRuntime(318): at java.lang.Class.getConstructor(Class.java:477)
10-29 01:18:51.046: E/AndroidRuntime(318): at android.view.LayoutInflater.createView(LayoutInflater.java:475)
10-29 01:18:51.046: E/AndroidRuntime(318): ... 21 more
感謝您迴應
感謝您的答覆,我想你的代碼,但我仍然得到同樣的錯誤。我跟着你的xml代碼,只需額外的按鈕,並將'setContentView(_myXmlLayout)'改爲'setContentView(R.layout.main)'。我錯過了什麼嗎?謝謝 – src
請在你的問題中發佈logcat的輸出與你的異常棧跟蹤 – Craigy
我編輯了我的原始帖子,包括logcat。謝謝 – src