文档章节

android开发笔记之多媒体—画画板(娱乐一下)

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:01
字数 528
阅读 21
收藏 0

效果:

这里写图片描述

其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了。

核心代码 :

public class MainActivity extends Activity implements OnClickListener,OnSeekBarChangeListener {

    private View red_view,green_view,blue_view;     //控制画笔颜色的三块区域
    private SeekBar seekBar;        //控制画笔粗细的拖动条
    private ImageView iv;   
    private Bitmap bitmap,backgroud;    //画纸和背景图
    private Canvas canvas;              //画布
    private Paint paint;                //画笔
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        red_view = findViewById(R.id.red_view);
        green_view = findViewById(R.id.green_view);
        blue_view = findViewById(R.id.blue_view);
        seekBar = (SeekBar) findViewById(R.id.seekbar);
        iv = (ImageView) findViewById(R.id.iv);
        iv.setImageResource(R.drawable.bg);
        //拿到背景图
        backgroud = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
        //拿到和背景图一样大小的画纸
        bitmap = Bitmap.createBitmap(backgroud.getWidth(), backgroud.getHeight(), backgroud.getConfig());
        //把画纸固定在画布上
        canvas = new Canvas(bitmap);
        //拿到画笔
        paint = new Paint();
        paint.setColor(Color.BLACK);//设置画笔颜色为黑色
        paint.setStyle(Style.STROKE);//设置画笔为空心
        //添加处理规则
        Matrix matrix = new Matrix();
        //照着背景图画
        canvas.drawBitmap(backgroud, matrix, paint);
        red_view.setOnClickListener(this);
        green_view.setOnClickListener(this);
        blue_view.setOnClickListener(this);
        seekBar.setOnSeekBarChangeListener(this);
        iv.setOnTouchListener(new OnTouchListener() {
            float startX;
            float startY;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                //获取按下时的坐标
                case MotionEvent.ACTION_DOWN:
                    startX = event.getX();
                    startY = event.getY();
                    break;
                //获取移动时的坐标
                case MotionEvent.ACTION_MOVE:
                    float stopX = event.getX();
                    float stopY = event.getY();
// // 在开始和结束坐标间画一条线
                    canvas.drawLine(startX, startY, stopX, stopY, paint);
                    //实时更新坐标(通过不断画线)
                    startX = event.getX();
                    startY = event.getY();

                    iv.setImageBitmap(bitmap);
                    break;
                case MotionEvent.ACTION_UP:
                    break;
                default:
                    break;
                }
                return true;
            }
        });
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.red_view:
            //当点击红色区域的时候设置画笔颜色为红色
            paint.setColor(Color.RED);
            break;
        case R.id.green_view:
            //当点击绿色区域的时候设置画笔颜色为绿色
            paint.setColor(Color.GREEN);
            break;
        case R.id.blue_view:
            //当点击蓝色区域的时候设置画笔颜色为蓝色
            paint.setColor(Color.BLUE);
            break;
        default:
            break;
        }
    }
    //拖动条的值改变的时候调用
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {

    }
    //开始拖动时调用
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }
    //停止拖动时调用
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        int progress = seekBar.getProgress();//拖动条默认的最大值为100
        paint.setStrokeWidth(progress/10f);//控制画笔的粗细范围(0-10)
    }
}

试试觉得很简单呢,赶紧试试吧

© 著作权归作者所有

共有 人打赏支持
Mr_Nice
粉丝 0
博文 47
码字总数 39947
作品 0
广州
[Material Design] 教你做一个Material风格、动画的按钮(MaterialButton)

原创作品,转载请注明出处:http://blog.csdn.net/qiujuer/article/details/39831451 前段时间Android L 发布了,相信看过发布会了解过的朋友都为其中的 “Material Design” 感到由衷的惊艳...

Qiujuer
2014/10/07
0
9
Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作

Android项目刮刮奖详解(四) 前言 我们已经成功实现了刮刮奖的功能了,本期是扩展篇,我们把这个View直接定义成开源控件,发布到JitPack上,以后有需要也可以直接使用,关于自定义控件的知识...

Stars-one
08/22
0
0
Android 源码分析之旅1--系统架构与分析方法、工具

《Android 源码分析之旅》目录 apefwkall.png 《Android 源码分析之旅》的全部目录将作如下安排: 第1章节——本篇文章,将介绍一些基本的概念、方法、工具。 第2章节——着重介绍Binder IP...

猴亮屏
2017/10/19
0
0
多媒体技术创新与难点探索(内附讲师资料下载)

娱乐、社交、游戏、企业协作、教育、医疗,多媒体技术在这些领域扮演着越来越重要的角色,从用户体验,服务的稳定性,再到降低运营成本,离不开多媒体开发工程师的努力——高并发的视频会议系...

livevideostack
07/10
0
0
JetPack 学习笔记:Databinding 与响应式

写在前面的废话: 我姑且也算个 Android 程序员,虽然上次写安卓已经是两年前。这次临时把原来的混合开发计划更改为原生开发 ,而 Android 端编码的工作就交给了我。 我花了 1 个月的时间完全...

龙骑将杨影枫
08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么你的python版本一团糟?因为少了这个操作

坑人的版本 Python 的版本问题一直是个广被吐槽的黑点。以至于有人调侃说: Python 是世界上最好的两种语言! 在这里我要说明下,对于初学者来说,版本间的语法差异其实并不大。现在刚开始学...

crossin
昨天
2
0
Cannot forward after response has been committed

声名:转载自CSDN 通过toncat启动服务器,可以正常登陆访问,登陆进去选择子系统的时候点击登陆的时候,可是去又回到了登陆界面,如此反复就是不能够进入子系统,查看后台报的错误: java.la...

小橙子的曼曼
昨天
2
0
shell编程(告警系统邮件引擎、运行告警系统)

告警系统邮件引擎 1.如果要使用邮件引擎功能,需要调用mail.py文件,放到/usr/local/sbin/mon/mail/目录下即可,具体内容如下: #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,s...

蛋黄_Yolks
昨天
1
0
Asus RamPage VI Extreme开不了机

Asus RamPage VI Extreme 的机器突然关机,然后就再也开不了机,没有任何反应。有人说是BIOS问题,可是这个连Bios都进不去的,按后面的刷新Bios、清除CMOS等都没有什么效果,没有任何反应。 ...

openthings
昨天
1
0
ubuntu 18.04 desktop 截图快捷键

如图,点击下方的 add shortcut 为这个快捷键命名 输入截图 command gnome-screenshot -a 设置快捷键 常用为 Ctrl - Alt + a 参考 http://os.51cto.com/art/200903/113091_all.htm...

公孙衍
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部