Я новичок в разработке приложений для Android и хотел бы кое-что спросить.
У меня есть растровое изображение внутри моего SurfaceView, которое я хочу анимировать и перемещать программно.Я также хочу поставить кнопку на экране, чтобы контролировать перемещение растрового изображения.Но поскольку я не могу поместить кнопку в SurfaceView, я объявил ее в RelativeLayout в своем XML-макете с именем main.xml.
Вот что находится внутри моего 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 с Layout, который находится в моем main.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);
}
}
, но он выдает ошибку «приложение неожиданно остановлено».Я делаю это неправильно?Если да, можете ли вы предложить лучший способ реализации этого?
Ваш ответ очень важен.Спасибо!
ps пока нет кодов растровой анимации и кнопок управления.Это просто взгляды, которые я сейчас решаю.:)
РЕДАКТИРОВАТЬ:
Я отредактировал свои коды и вот он:
так вот мой отредактированный 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
Спасибо за ваш ответ