实现画图板

package com.pingyijinren.helloworld;

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

import java.util.ArrayList;
import java.util.Iterator;

/**
 * Created by Administrator on 2016/6/2 0002.
 */
public class MyPaintView extends View {
    private ArrayList<Point> allPoints=new ArrayList<Point>();
    public MyPaintView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setBackgroundColor(Color.WHITE);
        setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Point point=new Point((int)event.getX(),(int)event.getY());
                if(event.getAction()==MotionEvent.ACTION_DOWN){
                    allPoints=new ArrayList<Point>();
                    allPoints.add(point);
                }
                else if(event.getAction()==MotionEvent.ACTION_UP){
                    allPoints.add(point);
                }
                else if(event.getAction()==MotionEvent.ACTION_MOVE){
                    allPoints.add(point);
                    MyPaintView.this.postInvalidate();
                }
                return true;
            }
        });
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint=new Paint();
        paint.setColor(Color.RED);
        if(allPoints.size()>1){
            Iterator<Point> iterator=allPoints.iterator();
            Point firstPoint=null;
            Point lastPoint=null;
            while(iterator.hasNext()){
                if(firstPoint==null){
                    firstPoint=iterator.next();
                }
                else{
                    if(lastPoint!=null){
                        firstPoint=lastPoint;
                    }
                    lastPoint=iterator.next();
                    canvas.drawLine(firstPoint.x,firstPoint.y,lastPoint.x,lastPoint.y,paint);
                }
            }
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.pingyijinren.helloworld.MainActivity">

    <com.pingyijinren.helloworld.MyPaintView
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>
package com.pingyijinren.helloworld;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
时间: 2024-11-08 23:46:48

实现画图板的相关文章

很值得学习的java 画图板源码

很值得学习的java 画图板源码下载地址:http://download.csdn.net/source/2371150 package minidrawpad; import java.awt.*; import java.awt.event.*; import java.io.InputStreamReader; import java.io.Reader; import javax.swing.*; // 主界面类 public class DrawPad extends JFrame i

Java版简易画图板的实现

Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现. 基本的思路是这样的:画板实现大致分三部分:一是画板界面的实现,二是画板的监听以及画图的实现,三是画板的重绘.(文章较长,但是代码是逐步递进的,可以按三部分分开来看,实现了当前部分再去看下一部分.)首先是画板的界面实现,因为我没有去找具体的图标,界面上的所有组件都是Swing的自带组件,所以界面略微有点简陋,不过如果想要优化也简单,把界面上的组件都改成自定义的图标即可.界面实现后,就可以考虑给界面的组件加上监听

H TML5 之 (5) 一个在线画图板

这里加入了点难度了,增加了对HTML很多时间的把握,对象的把握 index.html <!DOCTYPE HTML> <html> <head> <title>Paint</title> <meta charset="gbk" /> <link type="text/css" href="canvas.css" rel="stylesheet"/&g

android画图板,可将内容保存为图片

画图板,可通过直线或填充的方式进行绘画,可以设置画笔的颜色,粗细,并能够将绘制的内容保存为jpg文件(保存位置为sdcard/huaban) 下载地址: http://www.dwz.cn/zbOoL     

JAVA 仿XP画图板的总结

仿XP画图板是我接触JAVA以来的第二个项目.总得来说是比较成功的,不足是还有一些功能没有实现,之后有时间会慢慢完善. 话不多说,先上成果图(源码在最下面会附上链接): 可以看到,做的画图板已经实现了直线,矩形,椭圆,圆角矩形,多边形,刷子,喷漆,橡皮等基本功能,28种颜色可供选择.上方的菜单栏功能还没有开发~~ 如何做到这一个画图板呢?接下来是我画图板的制作过程: 1 . 画图板界面框架 我将整个框架分为五个部位,主界面面板,菜单栏部位,画图板面板,工具栏面板,颜色选择面板: 主界面:先实例化

iOS开发之画图板(贝塞尔曲线)

贝塞尔曲线,听着挺牛气一词,不过下面我们在做画图板的时候就用到贝塞尔绘直线,没用到绘制曲线的功能.如果会点PS的小伙伴会对贝塞尔曲线有更直观的理解.这篇博文的重点不在于如何用使用贝塞尔曲线,而是利用贝塞尔划线的功能来封装一个画图板. 画图板的截图如下,上面的白板就是我们的画图板,是自己封装好的一个UIView,下面会详细的介绍如何封装这个画图板,下面的控件用来控制我们画图板的属性以及Undo,Redo和保存功能.点击保存时会把绘制的图片保存到手机的相册中.下面是具体的实现方案. 一.封装画图板

iOS开发核心动画之画图板

1. 效果图 2. 用一个View来描述画图板,给画图板添加拖动的手势 // 从xib中加载 - (void)awakeFromNib { [self setUpGesture]; } // 代码创建 - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self setUpGesture]; } return self; } // 初始化添加拖动手势 - (void)se

Android笔记二十九. 一款简易画图板开发

一款简易画图板开发 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.画图板原理 1.直线效果 画图板表面上看起来可以随用户在触摸屏上自由的绘制任意图形,但是实际上当用户在触摸屏上移动时,两次拖动事件发生点的距离很小,多条极短的直线连接起来我们肉眼看起来就是直接了.在触摸屏绘制图形时,每条直线都是从上一次拖动事件发生点画到本次拖动事件的发生点,可以借助于Android提供的Path类来实现.然后,如果程序每次都是从上次拖动事件的发生点绘一条

Qt图形库——Qt画图板

Qt图形库--Qt画图板 完整代码: //mainwindows.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QColorDialog> #include <QInputDialog> #include <QActionGroup> #include <QFileDialog> #include <QMainWindow> #include <QKeyEvent> #in

Swift-贝赛尔曲线实现画图板 &amp;&amp; 截图保存到相册中

本文内容参考自 传送门.原文是用 OC 写的,我把它改成了 Swift 的. 我们先来看看效果图: 第一幅图是我们画了一个 "iOS" 的图像,第二幅图是我们点击保存成功,第三幅图是可以在相册中看到我们刚才画的图. 感觉很不错有木有?接下来我们就来说说是怎么实现的. 我们分两部分来说:上半部分的画图板和下半部分的控制区. 上半部分的画图板是我们自定义的 view,我们设置如下属性: class MyView: UIView { var color = UIColor.redColor(