android中Path的使用

实现一个简单的绘图工具:(在视图中可以任意绘制,点击清除按钮,可重新绘制,类似我画你猜)

自定义视图代码:

public class MySurfaceView2 extends SurfaceView implements SurfaceHolder.Callback,
        View.OnTouchListener {
    private Path mPath = new Path();
    private Paint mPaint = new Paint();
    public MySurfaceView2(Context context) {
        super(context);
        init();
    }

    public MySurfaceView2(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    private void init(){

        setOnTouchListener(this);
        getHolder().addCallback(this);

    }
    public void draw(){
        Canvas canvas = getHolder().lockCanvas();
        canvas.drawColor(Color.WHITE);
        canvas.drawPath(mPath,mPaint);
        getHolder().unlockCanvasAndPost(canvas);
    }
    //清理画布
    public void clear(){
        mPath.reset();
        draw();
    }

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
        draw();
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()){
            case MotionEvent.ACTION_DOWN:
                mPaint.setStyle(Paint.Style.STROKE);
                mPaint.setColor(Color.RED);
                mPath.moveTo(motionEvent.getX(),motionEvent.getY());
                break;
            case MotionEvent.ACTION_MOVE:
                //生成线条
                mPath.lineTo(motionEvent.getX(), motionEvent.getY());
                draw();
                break;
        }
        return true;
    }
}

在xml中加载自定义视图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <com.example.lance.test2.MySurfaceView2
        android:id="@+id/my_surface"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="清除"/>

</LinearLayout>

在主活动代码:

public class MainActivity extends AppCompatActivity {
    private MySurfaceView2 mMySurfaceView2;
    private Button mButton;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.four);

        mMySurfaceView2 = (MySurfaceView2) findViewById(R.id.my_surface);
        mButton = (Button) findViewById(R.id.btn);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mMySurfaceView2.clear();

            }
        });
    }

}
时间: 2024-10-05 19:46:19

android中Path的使用的相关文章

Android中Path类的lineTo方法和quadTo方法画线的区别

当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的lineTo和quadTo方法实现的绘制线路形式也是不一样的,下面就以代码的实现来直观的探究这两个方法的功能实现区别: 1. Path--->quadTo(float x1, float y1, float x2, float y2): 该方法的实现是当我们不仅仅是画一条线甚至是画弧线时会形成平滑的曲线,该曲线又称为"贝塞尔曲线"(Bezier curve),其中,x1,y1为控制点的坐标值,x2,y2为终

Android中自定义视图View之---Canvas和Path对象

介绍Android中的Paint和Canvas的概念和使用方法 Android中的Paint和Canvas的概念是很简单的,就是我们用画笔在画布上进行绘制没什么难度的,我们只要拿到画笔Paint和画布Canvas对象就可以进行操作了.当然Canvas对象提供了很多绘制图形的方法,下面来看一下代码吧: package com.example.drawpathdemo; import android.annotation.SuppressLint; import android.content.Co

在android中画圆形图片的几种办法

在开发中经常会有一些需求,比如显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其他的一些形状.但是往往我们手上的图片或者从服务器获取到的图片都是方形的.这时候就需要我们自己进行处理,将图片处理成所需要的形状.正如茴香豆的的"茴"写法大于一种,经过我的研究,画出特殊图片的方法也不是一种,我发现了三种,且听我一一道来. 使用Xfermode 两图相交方式 通过查找资料发现android中可以设置画笔的Xfermode即相交模式,从而设置两张图相交之后的显示方式,具体模式见下图,源

android中细节效果总结

android中细节效果总结 27. 三 / android基础 / 没有评论 andorid取消最上方的标题同时全屏显示 Source code     protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //取消最上方的标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.

Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1

Android基础入门教程--8.1.1 Android中的13种Drawable小结 Part 1 标签(空格分隔): Android基础入门教程 本节引言: 从本节开始我们来学习Android中绘图与动画中的一些基础知识,为我们进阶部分的自定义 打下基础!而第一节我们来扣下Android中的Drawable!Android中给我们提供了多达13种的 Drawable,本节我们就来一个个撸一遍! Drawable资源使用注意事项 Drawable分为两种: 一种是我们普通的图片资源,在Andr

Android中使用databinding编译时出现的error:Execution failed for task &#39;:app:dataBindingProcessLayoutsDebug&#39;

Windows环境下使用svn对AndroidStudio更新代码时,总会在源文件中出现一堆乱码,尤其是xml文件中的乱码,不仅找起来费劲,改起来更费劲. 最近从svn更新代码之后,编译时出现了下面这个提示,而且AS中没有错误提示,这可真是捉急了. databinding error:Execution failed for task ':app:dataBindingProcessLayoutsDebug' 后来,多亏这篇帖子提示,自己写了段代码来尝试下,http://stackoverflo

Android 中常见控件的介绍和使用

1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.lang.Object   ? android.view.View   ? android.widget.TextView 直接子类: Button, CheckedTextView, Chronometer, DigitalClock, EditText 间接子类: AutoCompleteTextV

Android中通信协议

一.TCP/IP协议(传输层协议) 1.Socket与ServerSocket Socket是应用层与TCP/IP协议簇通讯的中间抽象层,Socket是一组接口,在设计模式中,Socket的设计就是门面模式,它把复杂的TCP/IP协议簇的内容隐藏在套接字接口后面,用户无需关心协议的实现,只需使用Socket提供的接口即可. Socket的类型有两种,一种是面向连接的TCP应用服务,一种是面向无连接的UDP(User Data Package)应用服务.通俗的理解就是,TCP方式是打电话(连接性)

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文