Don't use a SurfaceView in a ViewFlipper.

Nor a ListView.

SurfaceView is a *very* *special* view.  As it says, what it does is create
a completely separate surface (a.k.a. window) that is associated with your
main window.  This window is positioned behind the main window, and a hole
punched through your main window to see the surface behind.

By its nature, this makes the interaction between the surface of the surface
view and the main view hierarchy limited.

The purpose of SurfaceView is to present static things like video playback
or a game playfield in its own surface so that it can draw outside of the
normal view hierarchy update model (and use OpenGL drawing, different color
spaces, etc).  It is not to give a tight integration with the rest of the
view hierarchy.

You should essentially think of it as an overlay, because really that is
what it is.

On Mon, Sep 19, 2011 at 10:29 AM, MobileVisuals <[email protected]>wrote:

> My app uses a ViewFlipper. It is possible to flip between the views
> without problems at first.But after switching to another app and then
> switching back to the ViewFlipper app, it is not possible to flip
> between the views. One of the views is always displayed as just a
> black screen.
>
> I have investigated the reason for this, using the simplest possible
> SurfaceView. It is still the same problem.
> It is not a thread problem, I see that the onDraw method is called
> like it should. What is the reason for this? Doesn't the ViewFlipper
> class support SurfaceView like it should?
>
>  I got the code for the SurfaceView from the basic tuturial:
>
> http://www.edu4java.com/androidgame/androidgame2.html
>
> and the code for the View flipper from Mark Murphys View flipper
> tutorial:
>
> https://github.com/commonsguy/cw-android/tree/master/Fancy/Flipper1
>
> This is my code:
> -----------------------------
>
> public class FlipperDemo2 extends Activity {
>
> ViewFlipper flipper;
>
> @Override
> public void onCreate(Bundle icicle) {
> super.onCreate(icicle);
> setContentView(R.layout.main);
>
> flipper=(ViewFlipper)findViewById(R.id.details);
> GameView lv=new GameView(this.getApplicationContext(),true);
> flipper.addView(lv,
>                new ViewGroup.LayoutParams(
>                ViewGroup.LayoutParams.FILL_PARENT,
>                ViewGroup.LayoutParams.FILL_PARENT));
> GameView lv2=new GameView(this.getApplicationContext(),false);
> flipper.addView(lv2,
>                new ViewGroup.LayoutParams(
>                ViewGroup.LayoutParams.FILL_PARENT,
>                ViewGroup.LayoutParams.FILL_PARENT));
> flipper.setFlipInterval(2000);//2000
> flipper.startFlipping();
> }
> }
> ----------------------------------
>
> public class GameView extends SurfaceView {
>
>        private SurfaceHolder holder;
>    boolean blue;
>
>    public GameView(Context context,boolean _blue) {
>
>          super(context);
>          holder = getHolder();
>          blue=_blue;
>          holder.addCallback(new SurfaceHolder.Callback() {
>
>                 @Override
>                 public void surfaceDestroyed(SurfaceHolder holder) {
>
>                 }
>
>                 @Override
>                 public void surfaceCreated(SurfaceHolder holder) {
>
>                        Canvas c = holder.lockCanvas(null);
>                        onDraw(c);
>                        holder.unlockCanvasAndPost(c);
>
>                 }
>
>                 @Override
>                 public void surfaceChanged(SurfaceHolder holder, int
> format,                           int width, int height) {
>                 }    });
>    }
>
>
>    @Override
>
>    protected void onDraw(Canvas canvas) {
>
>        if(blue)
>        canvas.drawColor(Color.YELLOW);
>        else
>                canvas.drawColor(Color.GREEN);
>    }
>
> }
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>



-- 
Dianne Hackborn
Android framework engineer
[email protected]

Note: please don't send private questions to me, as I don't have time to
provide private support, and so won't reply to such e-mails.  All such
questions should be posted on public forums, where I and others can see and
answer them.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to