将 Drawable 对象放置在 Android 片段布局的视图中

3mp*_*tri 5 containers android drawable inflate viewgroup

我认为标题涵盖了它:)我有一个可绘制对象,可以获取 .png 照片,我可以用手势操作它。我还有一个 xml 布局,其中的背景图像应该位于该可绘制对象的后面。一切都发生在一个片段中。

当我运行代码并到达此片段时,会显示 png 并且手势可以工作,但是,没有膨胀的布局并且按下后退按钮时应用程序崩溃(我猜这是因为我在片段中使用 setContentView 所以有没有返回堆栈?我该如何避免这种情况?)。

稍后我将向场景添加其他图层。

我的问题是,我怎样才能用 xml 布局来膨胀片段,在它上面显示可绘制的,也许稍后在所有这些之上添加其他视图?

该片段的代码如下:

public class RoomFragment extends Fragment {

ViewGroup mRoot;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    mRoot = (ViewGroup) inflater.inflate(R.layout.room_fragment, null);

    /** Placing furniture .png element in SandboxView */
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
            R.drawable.furniture);
    View view = new SandboxView(this.getActivity(), bitmap);
    this.getActivity().setContentView(view); // Replace with inflater?

    return mRoot;

}}
Run Code Online (Sandbox Code Playgroud)

谢谢你!

3mp*_*tri 2

我通过在该片段的 LinearLayout 包装器中添加一个 ID 来解决这个问题,然后在使用其 xml 膨胀片段后,使用 addView(view) 在其中添加可绘制视图的实例。

片段 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/bitmapBox"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/room"
    android:gravity="bottom|center"
    android:orientation="vertical" >
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

一段片段代码:

    ViewGroup mRoot;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    mRoot = (ViewGroup) inflater.inflate(R.layout.room_fragment, null);

    /** placing furniture element in SandboxView */
    LinearLayout myLayout = (LinearLayout) mRoot
            .findViewById(R.id.bitmapBox);

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
            R.drawable.furniture);

    View view = new SandboxView(this.getActivity(), bitmap);

    myLayout.addView(view);

    return mRoot;
Run Code Online (Sandbox Code Playgroud)