Android Surfaceview Learning Example

Source: Internet
Author: User
Tags reset thread

Surfaceview is a subclass of view that is used in exactly the same way as any view-derived class, and can be applied to animations like other view and placed in a layout.

The surface in the Surfaceview package supports drawing using all the standard canvas methods described earlier in this chapter, as well as the full OpenGL ES Library.

Using OpenGL, you can draw any supported 2D or 3D objects on the surface, which can greatly improve performance by relying on hardware acceleration (when available), compared to simulating the same effect on the 2D canvas.

Surfaceview is particularly useful for displaying dynamic 3D images, such as those that use the Google Earth feature, or for interactive games that provide immersion experience. It is also the best choice for real-time display of camera previews.

The obvious difference between Surfaceview and View is that:

1. A view that inherits Surfaceview can be another thread, or update a view in a child thread.

2. The drawing method of the Surfaceview is performed in a child thread and the example of the view class is executed in the UI thread.

3, Surfaceview must use the Lockcanvas method to lock the canvas before drawing, and then draw the canvas, then use the Unlockcanvasandpost method to unlock the canvas when the drawing is complete, and then display to the screen.

The event handling rules for the Surfaceview class are the same as view.

Specific examples:

Activity

public class Activity01 extends activity {     
    Gamesurfaceview mgamesurfaceview;     

    @Override public 
    void OnCreate (Bundle savedinstancestate) {     
        super.oncreate (savedinstancestate);     

        Mgamesurfaceview = new Gamesurfaceview (this);     
        Setcontentview (Mgamesurfaceview);     
    }     

    @Override Public 
    Boolean ontouchevent (Motionevent event) {     
        if (event.getaction () = = Motionevent.action_down) {     
            mgamesurfaceview.x = Event.getx ();     
            MGAMESURFACEVIEW.Y = Event.gety ();     
        }     

        return true;     
    }     

    @Override Public 
    boolean onKeyDown (int keycode, keyevent event) {     
        if (keycode = = Keyevent.keycode_back) {     
            this.finish ();     
        }     

        return true;     
    }     

Gamesurfaceview

public class Gamesurfaceview extends Surfaceview implements Surfaceholder.callback, Runnable {boolean mbloop     
    = false;     

    Surfaceholder msurfaceholder = null;     
    int count = 0;     
    float x = +, y = 50;     

    int screenwidth = ScreenHeight = 800;     

        Public Gamesurfaceview {Super (context);     

        Mbloop = true;     
        Msurfaceholder = This.getholder ();     
        Msurfaceholder.addcallback (this);     
    This.setfocusable (TRUE);   @Override public void surfacecreated (Surfaceholder holder) {New Thread (this). Start (). Start Paint thread} @Override public void surfacechanged (surfaceholder holder, int format, int Widt        h, int height) {screenwidth = width;      Reset width When screen orientation is changed screenheight = height; Reset height When screen orientation is changed} @Override 
    public void surfacedestroyed (Surfaceholder holder) {Mbloop = false; @Override public void Run () {while (Mbloop) {synchronized (Msurfaceholder)     
            ) {OnDraw ();     
            try {thread.sleep (200); The catch (Exception e) {}} is public void OnDraw () {Canvas     
        Canvas = Msurfaceholder.lockcanvas ();     
        if (Msurfaceholder = NULL | | canvas = NULL) {return;     
        } if (Count <) {count++;     
        else {count = 0;     
        } Paint mpaint = new Paint ();     
        Mpaint.setantialias (TRUE);     
        Mpaint.setcolor (Color.cyan);   Canvas.drawrect (0, 0, screenwidth, ScreenHeight, Mpaint); Repaint background color switch (count% 4) {     
        Case 0:mpaint.setcolor (Color.Blue);     
        Break     
            Case 1:mpaint.setcolor (Color.green);     
        Break     
            Case 2:mpaint.setcolor (color.red);     
        Break
            Case 3:mpaint.setcolor (Color.yellow);     
        Break
            Default:mPaint.setColor (Color.White);
        Break
        } canvas.drawcircle (x, Y, M, mpaint);
    Msurfaceholder.unlockcanvasandpost (canvas); }
}

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.