2011-10-28 7 views
1

私はAndroidアプリの開発には初めてです。何かお尋ねしたいと思います。XML RelativeLayoutとSurfaceビューの結合

プログラムでアニメーション化して移動したいSurfaceView内にビットマップがあります。私はまた、ビットマップの移動を制御するために画面にボタンを配置したい。しかし、私はSurfaceViewにボタンを置くことができないので、main.xmlというXMLレイアウトでRelativeLayoutの中に宣言しました。ここで

は、それでは私がやろうとしていることは私のメインであるレイアウトで(もっと良い言葉を見つけることができません)SurfaceViewを「組み合わせる」ことです私の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> 

何です.xml。ここで

は、私は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); 
    } 
} 

wのレイアウトを組み合わせることを試みるが、それは私に、「アプリケーションが予期せず停止しました」エラーを与える私のMain.javaです。私はそれを間違っているのですか?もしそうなら、これを実装するより良い方法を提案できますか?

あなたの回答は高く評価されます。ありがとう!

p.s.ビットマップアニメーションコードとボタンコントロールはまだありません。私が現在解決しているのは単なる見解です。 :)

EDIT:

私は私のコードを編集し、ここにある:

ので、ここで私の編集した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 

私はあなた自身のためにこれを過度に複雑さを考えるあなたの応答

答えて

3

いただきありがとうございます。少なくとも、ボタンをSurfaceView上に置くだけで、視覚的には、表面ビューと同じFrameLayoutにボタンを置くことで、hereのようにすることができます。

あなたはそれのように見えることができるように、同様にXMLでカスタムビューを宣言することができます。

<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="Button" android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 
</FrameLayout> 

その後、onCreateであなただけの

setContentView(R.layout.main_layout); 

を言わなければならどこにあなたがボタンを配置することができますたとえば、中央の中央に配置する場合は、android:layout_gravity="bottom|center_horizontal"を使用します。

EDIT:

カスタムビューが(ビューがXMLから作成されたときに呼び出され、その一部)に必要なすべてのコンストラクタを実装して、Eclipseのエディタでカスタムビュークラスを開いていることを確認して、に行くためにメニューソース - >は、スーパークラスからコンストラクタを生成します...それはあなたが応答のために

+0

おかげでコンストラクタを作成するのに役立ちます

は、私はあなたのコードを試してみましたが、私はまだ同じエラーを取得しています。追加のボタンだけであなたのXMLコードを追跡し、 'setContentView(_myXmlLayout)'を 'setContentView(R.layout.main)'に変更しました。何か不足していますか?ありがとうございます – src

+0

ご質問に例外スタックトレースとlogcatの出力を投稿してください – Craigy

+0

私はlogcatを含むオリジナルの投稿を編集しました。 Thanks – src

関連する問題