【问题标题】:SlidingDrawer hidden by image in SurfaceView在 SurfaceView 中被图像隐藏的 SlidingDrawer
【发布时间】:2012-02-19 03:27:13
【问题描述】:

我有一个 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);
}

【问题讨论】:

    标签: android android-layout surfaceview slidingdrawer


    【解决方案1】:

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

    android:background="#00000000";
    

    编辑

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

    sv.setZOrderOnTop(true); 
    

    【讨论】:

    • 我在评论中说过:p 很高兴你找到它
    • 我也是!感谢您的帮助。
    • 如果你想在顶部绘制布局:sv.setZOrderMediaOverlay(true)
    【解决方案2】:

    您是否尝试过让您的超类最后绘制,以便您在它下方绘制?

    @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);
    }
    

    使用滑动绘制的替代方法是有一个按钮来启动一个新的活动,然后在setContentView() 之前调用overridependingtransition(int enterAnim, int exitAnim) 以动画化活动以滑入和滑出。

    【讨论】:

    • 布伦德尔,非常感谢您的回复。尝试按照您的建议移动 super.onDraw(canvas) ,恐怕它没有任何区别。使用活动的替代方法很好。我会在适当的时候对此进行调查。
    • SlidingDrawer 和 Surface 的 XML 文件在哪里?即我希望是,&lt;FrameLayout&gt;&lt;surface/&gt;&lt;Drawer/&gt;&lt;/FrameLayout&gt;?
    • Blundell,SlidingDrawer 和 Surface 的布局不同。 SlidingDrawer 位于主 Activity 的布局中,而 Surface 位于由位于主 Activity 布局中的片段使用的布局中。我正在使用片段。
    • 所以让我们看看带有抽屉和片段的主布局的 XML,需要确保你的 zIndexing 是正确的
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2012-08-17
      • 1970-01-01
      • 2019-09-17
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多