在SurfaceView中由图像隐藏的SlidingDrawer

时间:2012-01-25 22:23:31

标签: android android-layout surfaceview slidingdrawer

我有一个SlidingDrawer和一个渲染图像的自定义SurfaceView。我刚刚尝试拖动SlidingDrawer,并且这样做发现它在SurfaceView中的图像后面并且完全隐藏。

您可以想象这对用户来说没什么用处,因此在拉起时需要图像始终落在SlidingDrawer后面。这可能吗?

包含它有助于这是xml中的SlidingDrawer:

<SlidingDrawer
             android:id="@+id/drawer"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:handle="@+id/handle"
             android:content="@+id/content"
             android:layout_alignParentBottom="true">

             <TextView
                 android:id="@id/handle"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:gravity="center"
                 android:paddingTop="5dip"
                 android:paddingBottom="5dip"
                 android:textStyle="bold"
                 android:text="text"/>


            <include layout="@layout/content"
                 android:id="@id/content"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"/>

         </SlidingDrawer>

这是xml中的SurfaceView:

<FrameLayout android:id="@+id/FrameLayout01" 
        android:layout_width="fill_parent" android:layout_height="fill_parent">
        <com.android.imagemagic.widgets.ImageManipulationSurfaceView
        android:id="@+id/surfaceArea"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:layout_gravity="center"/> 
    </FrameLayout>  

SurfaceView是自定义的,并在onDraw()方法中使用以下代码:

@Override
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas);

    //Clear canvas
    Paint paint = new Paint();
    paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
    canvas.drawPaint(paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC));

    // Draw image
    canvas.drawBitmap(image, imageX, imageY, null);
}

3 个答案:

答案 0 :(得分:5)

经过大量扫描后,我从以下Stack Overflow页面找到了我的问题的(简单)答案:Android: SlidingDrawer disappears under SurfaceView。很简单,在SlidingDrawer xml元素中添加:

android:background="#00000000";

修改

在隐藏背景后恢复原来的代码,它又停止了工作。最后,我发现我遇到的另一个问题是停止了上述解决方案的工作。为了其他人的利益,请确保不要通过以下方式将SurfaceView z-index设置为顶部:

sv.setZOrderOnTop(true); 

答案 1 :(得分:0)

你有没有试过让你的超级画画最后画画,以便你在它下面画画?

@Override
public void onDraw(Canvas canvas) { 
    //Clear canvas
    Paint paint = new Paint();
    paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
    canvas.drawPaint(paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC));

    // Draw image
    canvas.drawBitmap(image, imageX, imageY, null);

    super.onDraw(canvas);
}

使用滑动绘制的一个功能是让一个按钮开始一个新的活动,然后在overridependingtransition(int enterAnim, int exitAnim)之前调用setContentView()来动画活动以滑入和滑出。

答案 2 :(得分:0)

即使我遇到了类似的问题。但我找到了解决方法。
只需做slideHandleButton.setText(&#34;&#34;);当抽屉关闭时。这将使按钮出现:)