• android 关于SurfaceView(一) 画一条线


    两眼一摸黑,感觉看那些开发文档有点难看懂,可能是基础太差的原因,我需要一个循序渐进的介绍,实在没办法,自己写个得了

    SurfaceView是视图(View)的继承类,Surface的翻译是表面,

    我很想将其理解为画板,不过画板已经有其它类了,可以理解为一个绘画器,将一个图形数据交给它,它在画板上画出来。

    首先制造一个最基本的布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation
    ="vertical"
    android:layout_width
    ="match_parent"
    android:layout_height
    ="match_parent">
    <Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
    <SurfaceView android:id="@+id/surfaceView1" android:layout_width="match_parent" android:layout_height="match_parent"></SurfaceView>

    </LinearLayout>

    然后在活动中将按钮和SurfaceView找出来,给按钮设定一个事件

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.SurfaceView;
    import android.view.View;
    import android.widget.Button;

    public class SurfaceTest extends Activity {
    private Button mBtn;
    private SurfaceView mSurface;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.surfacetest);
    mBtn=(Button) this.findViewById(R.id.button1);
    mBtn.setOnClickListener(new BtnClick());
    mSurface=(SurfaceView) this.findViewById(R.id.surfaceView1);
    }
    private class BtnClick implements View.OnClickListener {
    @Override
    public void onClick(View v) {

    }
    }
    }

    接下来我们要使用SurfaceView 需要用到SurfaceHolder

    或者以后还需要用到SurfaceHolder.Callback

    Holder单词的意思是持有人 Callback就不用说了,是回调,因为基础的原因,不是很明白这样做成三个类的原因,基础很重要啊。

    先实现一个最最简单的,画一条线

    在这里,使用holder画东西的过程是

    锁定画布

          Canvas lockCanvas();

          Canvas lockCanvas(Rect dirty);第二个方法只锁定需要画的范围,这样可以提高速度

    画图------------------ 其实画图的方法和SurfaceView无关了,只是从SurfaceView里面得到了一个Canvas(画板),这里才是画的地方。

    解除锁定

           void unlockCanvasAndPost(Canvas canvas);解除之后,图像才会真正的画出来

     private class BtnClick implements View.OnClickListener {
    @Override
    public void onClick(View v) {
    drawLine();
    }
    }

    private void drawLine()
    {
    Canvas c=mSurfaceHolder.lockCanvas();
    Paint p=new Paint();
    p.setColor(Color.RED);
    c.drawLine(10, 10, 40, 10, p);
    mSurfaceHolder.unlockCanvasAndPost(c);
    }

    这样就可以画些图形了,所有画图的方法都使用的是Canvas的方法,Canvas还可以画很多其它的东东,包括图片,需要另外研究,Paint是画笔属性,可以设置颜色等

    接下来实现这条线的移动




  • 相关阅读:
    程序员到底该怎么给女朋友挑礼物
    漫说测试 | 研发虐我千百遍,我待bug如初恋
    知识是有价值的
    如何防止ASP.NET网站遭受CSRF的攻击
    如何让ASP.NET网站站点不停止 永远持续运行
    在ASP.NET MVC中验证checkbox 必须选中 (Validation of required checkbox in Asp.Net MVC)
    SOA和Web Service介绍
    ASP.NET网站如何显示自己的网页图标
    ASP.NET(C#)中的try catch异常处理机制
    Session.Abandon, Session.Clear和Session.Remove的区别
  • 原文地址:https://www.cnblogs.com/meieiem/p/2248126.html
Copyright © 2020-2023  润新知