The mechanisms that won't work correctly with SurrfaceViews are animations of any kind (fade, translate, scale, etc.) Since a scroll is a form of a translate animation...
On Sun, Sep 25, 2011 at 2:33 AM, Trev16v <trev...@googlemail.com> wrote: > Hi all, > > I've followed this thread with interest because I had intended to do > something very similar; that is, have multiple pages that the user can > swipe between (using a ViewFlipper) where some screens may be composed > of a mixture of SurfaceViews and normal Views. To be clear, I don't > wish to have SurfaceViews at or greater than screen size; rather, just > some of my smaller screen components are made using SurfaceViews. Now, > after working with SurfaceViews quite a bit, I'm quite happy in my > understanding of why a SurfaceView is special, and how it is > effectively removed from the normal View hierarchy. (In simplistic > terms, I think of the SurfaceView as a means of handing control of a > specified screen video memory area directly to the application, with > the benefit of separately-threaded update performance, but obvious > cost of interaction with normal View hierarchy). > > Having read this discussion, what I'm not quite clear about in my head > at the moment is exactly which combinations of ViewGroup container and > SurfaceView are either just 'bad' (and why) or simply won't work. For > example, for my application where the user can swipe between multiple > pages of a dashboard in order to view various dashboard components > (where some are made using SurfaceViews) I considered using a > HorizontalScrollView. However, doing some Googling I did come across > Dianne advising "you shouldn't put a SurfaceView inside of a > ScrollView or other such container" (however, I note that was in > response to someone wanting to scroll a SurfaceView that occupied more > than the screen area). I did, however, find that a test Activity using > a HorizontalScrollView with several SurfaceViews contained within did > seem to work fine; I was able to scroll left and right to be able to > view all SurfaceViews and they continued to redraw okay. > > So, to round up the question (and apologies for hijacking the OP's > original thread slightly): in order to implement a layout that's > larger than the screen size where the user scrolls back and forth to > see all content, and where some of the screen components to be > scrolled are implemented using SurfaceViews, what View mechanisms > and / or ViewGroup derivatives should one *not* be using? Apologies in > advance if I've misquoted or got the wrong end of the stick at all. > > Many thanks, > > Trev > > On Sep 21, 7:13 pm, MobileVisuals <eyv...@astralvisuals.com> wrote: > > I got this to work no without the ViewFlipper. I think that there > > should be information in the ViewFlipper class > > that it doesn't support SurfaceView. I lost many hours of work because > > of this. The reason I used the ViewFlipper class for SurfaceView was > > that other threads on this forum recommended it, like this one: > > > > https://groups.google.com/group/android-developers/browse_thread/thre... > > > > So there are other developers who have made the same mistake. > > > > On Sep 20, 3:51 pm, MobileVisuals <eyv...@astralvisuals.com> wrote: > > > > > How can I then switch between a view with 2d rendering and a view with > > > 3d rendering? > > > > > I suppose I have to use GLSurfaceView for 3d rendering with OpenGL? > > > > > On Sep 20, 3:00 pm, Jens <dunkingbikk...@gmail.com> wrote: > > > > > > That would be the gist of what both Dianne & Romain Guy said yes. > > > > > > On Sep 20, 2:13 pm, MobileVisuals <eyv...@astralvisuals.com> wrote: > > > > > > > GLSurfaceView extends SurfaceView. Does that mean that it is not > > > > > possible to animate GLSurfaceView with a viewflipper? > > > > > > > On Sep 20, 9:54 am, Romain Guy <romain...@android.com> wrote: > > > > > > > > You can animate another view on top of a SurfaceView, you just > cannot > > > > > > animate the SurfaceView itself. > > > > > > > > On Tue, Sep 20, 2011 at 12:51 AM, MobileVisuals < > eyv...@astralvisuals.com>wrote: > > > > > > > > > Thanks for the info, I have spent many hours investigating this > issue > > > > > > > and now I finally know what the problem is. My app has a > standard 2d > > > > > > > menu. It is possible to view different 3d visual effects from > the > > > > > > > menu. The 3d visual effects are rendered in a GLSurfaceView. > That > > > > > > > class extends SurfaceView. > > > > > > > > > You say that SurfaceView should not be used in a ViewFlipper. > How can > > > > > > > I implement my app if I can't use SurfaceView or GLSurfaceView? > Which > > > > > > > type of view should I use for the ViewFlipper? Can I render the > 3d > > > > > > > visual effects with other views than GLSurfaceView? > > > > > > > > > Or shouldn't I use a ViewFlipper at all? If not, how can I then > switch > > > > > > > between the 2d and the 3d rendering? > > > > > > > > > On Sep 19, 7:37 pm, Dianne Hackborn <hack...@android.com> > wrote: > > > > > > > > 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 < > > > > > > > eyv...@astralvisuals.com>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 > > > > > > > android-developers@googlegroups.com > > > > > > > > > To unsubscribe from this group, send email to > > > > > > > > > android-developers+unsubscr...@googlegroups.com > > > > > > > > > For more options, visit this group at > > > > > > > > >http://groups.google.com/group/android-developers?hl=en > > > > > > > > > > -- > > > > > > > > Dianne Hackborn > > > > > > > > Android framework engineer > > > > > > > > hack...@android.com > > > > > > > > > > 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 > android-developers@googlegroups.com > > > > > > > To unsubscribe from this group, send email to > > > > > > > android-developers+unsubscr...@googlegroups.com > > > > > > > For more options, visit this group at > > > > > > >http://groups.google.com/group/android-developers?hl=en > > > > > > > > -- > > > > > > Romain Guy > > > > > > Android framework engineer > > > > > > romain...@android.com > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- Romain Guy Android framework engineer romain...@android.com -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en