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

