任何人都可以建议一个关于在SurfaceView上绘制形状的好教程吗?

时间:2011-04-06 17:33:43

标签: android surfaceview

我正在试着在屏幕上绘制一些形状而失败。 我有一个SurfaceView类,我已将其设置为我的contentview,并尝试在其onSurfaceCreated调用中绘制一个椭圆,但没有任何东西被绘制。

我完全有可能不了解企业的​​整体性质。我的理解是,Surface基本上是一块空白的板岩,我可以在其上绘制我喜欢的任何东西。

这是我的代码(我不一定要“修复”这段代码,而不是以“正确”的方式执行此操作,无论是什么......,只是找不到解释此代码的文档。我不知道不想(或需要)OpenGL,只想手动绘制形状,文本等。

此代码运行(没有失败),但没有任何内容被绘制。

TIA

    public class main extends Activity {
    /** Called when the activity is first created. */
    public  Context c;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(new Surf(this));
    }
}

class Surf extends SurfaceView implements SurfaceHolder.Callback {
    SurfaceHolder mHolder;
    Canvas can;
    Context c;
    private ShapeDrawable mDrawable;

    SynField(Context context) {
        super(context);

        c = context;

        this.layout(20, 20, 660, 500);
        mHolder = getHolder();
        //mHolder.addCallback(this);
        //mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        Log.d("MY_DEBUG", "drawing");
        can = mHolder.lockCanvas();

        int x = 10;
        int y = 10;
        int width = 300;
        int height = 50;

        mDrawable = new ShapeDrawable(new OvalShape());
        mDrawable.getPaint().setColor(0xcccccccc);
        mDrawable.setBounds(x, y, x + width, y + height);


    }



    public void surfaceCreated(SurfaceHolder holder) {
        Log.d("MY_DEBUG", "surface drawn");
        mDrawable.draw(can);

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }
}

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

http://www.droidnova.com/playing-with-graphics-in-android-part-ii,160.html http://www.devdaily.com/java/jwarehouse/android/core/java/android/view/SurfaceView.java.shtml

这些可能会有所帮助......

我认为你可以尝试在android sdk中使用Paint类来实现它。 可以做类似的事情:

Paint mypaint = new Paint(); Canvas c = new Canvas(); c.drawLine(10,10,20,20,mypaint);

答案 2 :(得分:0)

我在本教程中学到了很多关于如何创建绘图应用程序的知识。我相信它会有所帮助:

http://mobile.tutsplus.com/tutorials/android/android-sdk-create-a-drawing-app-interface-creation/