SlidingDrawer скрытый изображением в SurfaceView - PullRequest
5 голосов
/ 26 января 2012

У меня есть и SlidingDrawer, и пользовательский SurfaceView, который отображает изображение.Я только что попытался перетащить SlidingDrawer и обнаружил, что он скрывается за изображением в SurfaceView и полностью скрыт.

Как вы можете себе представить, это будет бесполезно для пользователя, и поэтому необходимо, чтобы изображение всегда отставало от SlidingDrawer при его поднятии.Возможно ли это?

Если это помогает, это SlidingDrawer в xml:

<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>

И это SurfaceView в xml:

<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>  

SurfaceViewcustom и использует следующий код в методе 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 ]

5 голосов
/ 26 января 2012

После долгих поисков я нашел (простой) ответ на мою проблему на следующей странице переполнения стека: Android: SlidingDrawer исчезает в SurfaceView . Проще говоря, в элемент XML SlidingDrawer добавьте:

android:background="#00000000";

Редактировать

Вернувшись обратно к моему исходному коду после изменения фона, он снова перестал работать. В конце концов я обнаружил, где другая проблема, с которой я столкнулся, остановила работу вышеуказанного решения. В интересах всех остальных, убедитесь, что вы не устанавливаете z-индекс SurfaceView на верхний уровень с помощью:

sv.setZOrderOnTop(true); 
0 голосов
/ 11 октября 2012

Даже я сталкивался с подобной проблемой. Но я нашел обходной путь для этого.
Просто сделайте slideHandleButton.setText (""); когда ящик закрыт. Это заставит кнопку появиться:)

0 голосов
/ 26 января 2012

Вы пытались позволить своему суперклассу рисовать в последний раз, чтобы вы рисовали под ним?

@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(), чтобы анимировать занятие, чтобы скользить внутрь и наружу.

...