我可能想在这里立刻问过多,但任何能够帮助我一点点的圣洁,耐心的Android大师可能会让我的项目免于失败。
我正在制作一个装扮玩偶应用程序,用户可以在另一个视图中将项目从“服装库存”视图拖到“玩偶”上。
首先,我无法弄清楚如何将玩偶和库存放在不同的视图中,并且仍然可以在两者之间拖动位图。 (绘制和拖动位图本身不是问题)。
到目前为止,我已经能够工作了,就是使用一个扩展的SurfaceView,我以编程方式添加到我的布局中并使用一个线程绘制到它的Canvas。在画布的一侧,我绘制了构成娃娃的小号。另一方面,我绘制构成库存的位图。它工作得很好,但我需要能够将它分成两个视图,因为a)玩偶视图的高度需要大于库存视图的高度,并且b)我想重新使用其他地方,在不同的活动中,有两种观点。
所以,最后,我的问题是:如何在两个表面视图的画布之间共享位图?或者,我可以使用覆盖整个屏幕的Canvas,其他视图(按钮TextView等)放在它上面吗?或者,还有其他一些完全更合乎逻辑的方式来做我试图通过我的事情吗?如果我有两个SurfaceView,每个都有一个由一个线程控制的Canvas,我怎么能处理这样一个事实,即我拖动的位图可能会同时“部分”在两个画布的区域内? (我真的只想要一个屏幕大小的画布,不是吗?)
以Progamatically方式添加SurfaceView,我们称之为DollView,根据下面的Layout XML,将其添加到另外空的嵌套RelativeLayout中。我继续通过在布局XML中添加按钮来不断地捏造东西,不知何故,DO出现在DollView的顶部,并且不受DollView的Canvas的连续绘图和重新绘制的影响。当我拖动衣服项目或玩偶片段的位图时,它会在这些按钮下方传递...... 和如果我拖动位图超出DollView的父亲RelativeLayout的指定宽度,我仍然可以“保持”它,并将其带回到视图中,但是,它没有被绘制到屏幕上。完全被那个难倒,但现在我的问题最少了。
我可以向任何对这种疯狂感兴趣的人展示他们希望看到的代码。谢谢你的支持。我希望阅读它不会伤害你的头脑,就像试图解释它伤害了我的一样! :)
这是活动的布局,它被设置为OnCreate中的内容视图:
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/header_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:text="Header text..." />
<!-- The extended SufaceView (DollView) is programatically added to this RelativeLayout -->
<RelativeLayout android:id="@+id/doll_layout"
android:layout_width="350dip"
android:layout_height="wrap_content"
android:layout_below="@+id/header_text"
android:layout_alignParentLeft="true" />
<TextView android:id="@+id/stats"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_below="@+id/header_text"
android:layout_toRightOf="@+id/doll_layout"
android:layout_alignParentRight="true"
android:text="Stats text..." />
<TableLayout android="@+id/stats_table"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/stats"
android:layout_toRightOf="@+id/doll_layout"
android:layout_alignParentRight="true">
<TableRow>
<TextView android:id="@+id/stat_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="stat one..." />
<TextView android:id="@+id/stat_one_score"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="0" />
<TextView android:id="@+id/stat_one_mod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text=" " />
</TableRow>
<TableRow>
<TextView android:id="@+id/stat_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="stat two..." />
<TextView android:id="@+id/stat_two_score"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="0" />
<TextView android:id="@+id/stat_two_mod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text=" " />
</TableRow>
<TableRow>
<Button android:id="@+id/stats_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="stats" />
<Button android:id="@+id/info_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="info" />
<Button android:id="@+id/help_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="help" />
</TableRow>
</TableLayout>
<!-- A "dragged" bitmap from the DollView passes underneath this TextView. Why? -->
<TextView android:id="@+id/doll_name"
android:textSize="16sp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/header_text"
android:layout_alignParentLeft="true"
android:text="" />
<!-- dragged bitmaps pass under all of these buttons too, apart from the last three
nav buttons, as they're outside the DollView's width.
How would I make the dragged bitmaps pass OVER these objects, instead? -->
<Button android:id="@+id/nav_btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/nav_btn2"
android:text="nav1" />
<Button android:id="@+id/next_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/nav_btn1"
android:layout_centerHorizontal="true"
android:text="Next" />
<Button android:id="@+id/prev_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/nav_btn1"
android:layout_toLeftOf="@+id/next_btn"
android:text="Previous" />
<Button android:id="@+id/nav_btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/nav_btn3"
android:text="nav2" />
<Button android:id="@+id/nav_btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/nav_btn4"
android:text="nav3" />
<Button android:id="@+id/nav_btn4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/nav_btn5"
android:text="nav4" />
<Button android:id="@+id/nav_btn5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/nav_btn6"
android:text="nav5" />
<Button android:id="@+id/nav_btn6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="nav6" />
答案 0 :(得分:1)
您可以尝试使用FrameLayout将按钮叠加到SurfaceView上。不确定您的点击是否会发送到正确的视图。
使用FrameLayout在图像上叠加文本的答案 1 :(得分:1)
最好的方法是将您的surfaceview添加为RelativeLayout的子项。然后另一个视图将是RelativeView的另一个子视图。这样画布绘图就不会受到干扰。
http://groups.google.com/group/android-developers/browse_thread/thread/b3917e04d47fb27f?pli=1
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
layout = new RelativeLayout(this);
RocketView rocketView;
rocketView = new RocketView(this);
layout.addView(rocketView);
setContentView(layout);
}
答案 2 :(得分:0)
对于2D游戏我强烈建议使用AndEngine。它是免费使用的,当您准备在市场上销售游戏时,没有什么可担心的。该项目是开源的,但只需使用他们编译的库即可快速开始使用它。
显示演示的视频: http://www.andengine.org/blog/
他们的支持论坛: http://www.andengine.org/forums/
开始使用andEngine: http://www.andengine.org/forums/tutorials/getting-started-with-andengine-t11.html
最初使用它会对你有所帮助,但是一旦你了解了它的基础知识,它的使用就会非常惊人。