Android多媒体之画画板开发案例分享
作者:TheMrNice 发布时间:2022-11-17 11:05:08
标签:Android,多媒体,画板
本文实例为大家分享了Android多媒体之画画板开发的具体代码,供大家参考,具体内容如下
先看看效果:
其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了。
核心代码 :
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)
}
}
试试觉得很简单呢,赶紧试试吧!
又到周五了,希望大家有个快乐周末,谢谢大家一直对小编的支持,小编一定会再接再厉,为大家分享更多精彩的文章。


猜你喜欢
- 1. 三种常用的字符串判空串方法:Length法:bool isEmpty = (str.Length == 0);Empty法:bool
- 目录1. 前言2. 方法1 使用SurfaceView3. 方法2 给拍照下来的图片添加水印第一步:获取拍照权限第二步:拍照调用相机进行拍照
- 本文实例展示了DevExpress实现为TextEdit设置水印文字的方法,是一个很实用的技巧。分享给大家供大家参考。关键代码如下:publ
- 前言我们知道,Java项目编译后会生成许许多多的class文件,class文件保存着类的描述信息。虚拟机把描述类的数据从Class文件加载到
- HTTP请求:如果需要Json格式的自己转下,度娘上N种姿势…//处理http请求 requestUrl为请求地址 requestMetho
- 一、任务和执行策略之间的隐性耦合Executor可以将任务的提交和任务的执行策略解耦只有任务是同类型的且执行时间差别不大,才能发挥最大性能,
- 一、Drools引擎简介1、基础简介Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形
- 1.线程池Executors的简单使用1)创建一个线程的线程池。 Executors.newSingleThreadExecutor();
- 一、什么是RestTemplate?RestTemplate 是一个HTTP客户端,在Spring Cloud的服务调用方使用它我们可以方便
- BufferedImage转换为MultipartFileJava里读取图片或调整图片大小可使用BufferedImage进行操作(参考我另
- 前言在开发中常要处理横竖屏切换,怎么处理先看生命周期申明Activity 横竖屏切换时需要回调两个函数 ,所以在此将这个两个函数暂时看成是A
- 适配器模式是一种重要的设计模式,在 Android 中得到了广泛的应用。适配器类似于现实世界里面的插头,通过适配器,我们可以将分属于不同类的
- 对于换肤技术,相信伙伴们都见过一些大型app,到了某些节日或者活动,e.g. 双十一、双十二、春节等等,app的ICON还有内部的页面主题背
- 有些情况下,在开发一些C#小项目的时候,交付给别人用的时候就是单独EXE文件,但是若涉及什么EXCEL,图片什么的时候,比较麻烦,这时候可以
- 这次主要是练习一下Android的自定义view和path的相关使用,所以做了一个简单的demo:自定义一个view,并用path在上面画一
- using System;using System.Collections.Generic;using System.IO;using Sy
- 1、Service的种类按运行地点分类:类别区别 优点缺点 应用本地服务(Local)该服务依附在主进程上,
- java数据类型与二进制详细介绍在java中Int 类型的变量占 4个字节Long 类型的变量占8个字节一个程序就是一个世界,变量是这个程序
- 本篇文章主要介绍了详解Xamarin.Android 利用Fragment实现底部菜单,分享给大家,具体如下:效果图:第一步:添加引用引用
- 先看看目前这4种数据库的分页写法:-- OracleSELECT * FROM ( SELECT RO