`

android -> canvas学习3 (跟随手势画直线)

 
阅读更多

 

 DiyView.java

package com.test1;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

/**
 * 九宫格解锁控件
 * Created by Jerry on 2015/9/21.
 */
public class DiyView extends View {
    public DiyView(Context context) {
        this(context, null);
    }
    public DiyView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public DiyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        init();
    }

    //初始化
    Paint paint;
    private void init(){
        this.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg));//背景
        //初始画笔
        paint = new Paint();
        paint.setColor(Color.parseColor("#00B7EE"));
        paint.setAntiAlias(true);//消除锯齿
        paint.setStrokeWidth(33);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        //画直线
        //drawLine(float startX, float startY, float stopX, float stopY,Paint)

        canvas.drawLine(startX, startY, endX, endY, paint);

    }

    private float startX, startY;
    private float endX,endY;
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //获取手势当下坐标
        float crtX = event.getX();
        float crtY = event.getY();
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            //按下时,开始  位置 和 结束位置 都是在一个点就是当前的点,
            startX = crtX;
            startY = crtY;
            //
            endX = crtX;
            endY = crtY;
        }
        if(event.getAction() == MotionEvent.ACTION_MOVE){
            endX = crtX;
            endY = crtY;

        }
        if(event.getAction() == MotionEvent.ACTION_UP){
            startX = 0;
            startY = 0;
            //
            endX = 0;
            endY = 0;
        }
        invalidate();//重新执行onDraw
        return true;
    }

    public void print(String str){
        Log.d("mft",str);
    }
}

 

 

布局文件  

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

 

    <com.test1.DiyView
        android:id="@+id/diyView"
        android:layout_width="match_parent"
        android:layout_height="300dip"
        android:background="#55ff00ff"
        />
</RelativeLayout>

 

入口文件 MainActivity.java  同样在这里面也可以做 画布的 监听 

package com.test1;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class MainActivity extends Activity implements View.OnClickListener {

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

        DiyView lockView = (DiyView) findViewById(R.id.diyView);
        lockView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    print("onMain Down");
                }
                if (event.getAction() == MotionEvent.ACTION_MOVE) {
                    print("onMain Move");
                }
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    print("onMain Up");
                }
                return false;
            }
        });
        //\\

    }
    @Override
    public void onClick(View v) {
        String str = v.getTag().toString();
        print(str);

    }


    public void print(String con){
        Log.d("mft",con);
    }


}

 

 

 

分享到:
评论

相关推荐

    android---用canvas实现画板

    在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具,它是`android.graphics`包中的一个类。Canvas提供了各种方法来绘制线条、形状、文本、图片等元素,使得开发者能够实现丰富的用户界面,如画板应用。本文...

    C++ Builder 中的自画功能

    ((TComboBox*)Control)-&gt;Canvas-&gt;TextOut(Rect.Left + 20, Rect.Top + 2, ((TComboBox*)Control)-&gt;Items-&gt;Strings[Index]); // 标记当前鼠标所在项(焦点项) if (State.Contains(odFocused)) { ((TComboBox*)...

    Android代码-用Canvas实现的简单粒子动画

    手摸手教你用Canvas实现简单粒子动画 Attributes name format description 中文解释 pv_host_text string set left host text 设置左边主文案 pv_host_text_size dimension set host text size 设置主文案...

    Android 自定义画布canvas 实现绘制和清空画布功能

    在Android开发中,自定义画布Canvas是实现图形绘制的核心工具。Canvas提供了丰富的API,允许开发者在屏幕上绘制各种形状、图像以及文字等。本教程将深入探讨如何利用Canvas实现绘制和清空画布的功能。 首先,我们...

    Android 画布Canvas之连线动画Demo

    在Android开发中,Canvas是用于在屏幕上绘制2D图形的核心组件。`Canvas`类提供了丰富的绘图方法,让我们能够在Bitmap或者Surface上绘制线条、形状、文本等元素。在这个"Android画布Canvas之连线动画Demo"中,我们将...

    android-canvas-donut-chart.7z

    通过"android-canvas-donut-chart"这个示例项目,开发者可以学习到如何在Android中利用Canvas API创建自定义的可视化组件,理解图形绘制的基本原理,并且能掌握数据可视化的实现技巧。这个过程不仅锻炼了编程技能,...

    BCB Canvas 是 Borland C++ Builder (BCB) 中的一个核心绘图概念,它涉及到图形用户界面(GUI)编程中的画布组件

    例如,可以设置 Canvas-&gt;Pen-&gt;Width 为 5,Canvas-&gt;Pen-&gt;Color 为红色,Canvas-&gt;Pen-&gt;Style 可以选择实心线、透明线、破折线、点线、破折线加点线或破折线加点加点线等样式。 Brush(刷子):TBrush 类别的属性,...

    android-openGL-canvas-master.zip

    在“android-openGL-canvas-master.zip”这个项目中,开发者可能结合了这两者,创建了一个示例应用来展示如何在 Android 上使用 OpenGL ES(OpenGL 的嵌入式版本)与 Canvas 进行交互,以实现更高效的图形绘制和动画...

    C++ Builder DrawGrid控件基本用法,使用实例,一个例子(诚诚照片Demo)

    dg-&gt;Canvas-&gt;Font-&gt;Style-&gt;SetElement(esBold); // 在(ACol, ARow)位置绘制文本 dg-&gt;Canvas-&gt;TextOut(Rect.Left + 5, Rect.Top + 5, "示例文本"); } ``` 在"诚诚照片Demo"中,你可能想要在DrawGrid中展示照片。...

    android-canvas.rar_ android Canvas_android canvas_android canv

    Android Canvas是Android系统中用于图形绘制的核心组件,它在Android应用开发中扮演着至关重要的角色。...在学习过程中,参考提供的“android-canvas.pdf”文档,将会对理解Canvas的工作原理和实践技巧有很大帮助。

    images-tools:基于 node-canvas 和 node-images 实现批量修改图片大小、画布大小、图片拼合、压缩、裁剪等功能

    images-tools 基于 node-canvas、node-images 实现对图片的一些操作,包括放大、缩小、压缩、修改画布大小等。 功能 resize.js -&gt; 修改图片画布大小 ...apis/frameAnimation.js -&gt; node-canvas 裁剪图片,生成圆角图片

    android canvas 画曲线图 画三角形(多边形)

    本篇文章将详细讲解如何利用Canvas在Android中画曲线图和三角形(多边形),并结合示例代码帮助理解。 首先,我们要明白Canvas的基本用法。Canvas是Android中的一个类,它提供了在Bitmap上绘制图形的方法。通常,...

    Android代码-这里收集了大家常用的一些Android的模板代码

    EnglishVersion -&gt;_-&gt;:https://github.com/jiang111/awesome-android-tips/blob/master/README-en.md 值得收藏的AS插件 -&gt;_-&gt;:https://github.com/jiang111/awesome-androidstudio-plugins 这里收集了大家常用的...

    BCB Canvas

    `设置画笔宽度为5个像素,`Canvas-&gt;Pen-&gt;Color=clRed;`将画笔颜色设为红色,`Canvas-&gt;Pen-&gt;Style=psDashDot;`则设置线条样式为破折线加点线。 3. **Brush属性**:TBrush类用于定义填充封闭区域的颜色或样式。例如,...

    android-openGL-canvas:一个Android库,提供使用openGL画布在SurfaceView或TextureView上绘制内容的视图

    项目应用功能提供一个类似Android Canvas类的使用OpenGL来实现实现的canvasGL。可以像传统自定义View那样直接继承GLViews,再使用这个canvas替换需要的东西。提供类似GPUImage里的Filter的API,可以在使用画布GL画...

    Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)

    在Android开发中,Canvas是用于在屏幕上绘制2D图形的核心组件。它允许开发者直接在Bitmap上进行绘制操作,实现各种视觉效果。以下是对标题和描述中提到的各种图形绘制方法的详细说明: 1. **点(Point)**:使用`...

    Android -自定义view-Paint和Canvas.rar

    本资源“Android -自定义view-Paint和Canvas.rar”着重讲解了如何利用Paint和Canvas进行自定义View的绘制。下面将详细介绍这两个关键概念及其在自定义View中的应用。 1. **Paint(画笔)**: Paint是Android图形库...

    开源的HTML5 Canvas画图插件 - Literally Canvas

    &lt;canvas id="my-canvas" width="400" height="400"&gt;&lt;/canvas&gt; &lt;script src="path/to/literallycanvas.min.js"&gt;&lt;/script&gt; &lt;script&gt; var lc = new LiterallyCanvas(document.getElementById('my-canvas')); ...

    vue-canvas-poster 海报合成

    在这个“vue-canvas-poster”项目中,我们将探讨如何结合Vue和Canvas来实现一个海报合成的功能。 首先,Vue组件是Vue.js的核心概念,它允许开发者将UI拆分成可复用的部分。在这个案例中,“vue-canvas-poster”可能...

Global site tag (gtag.js) - Google Analytics