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)
 }
}

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

又到周五了,希望大家有个快乐周末,谢谢大家一直对小编的支持,小编一定会再接再厉,为大家分享更多精彩的文章。

标签:Android,多媒体,画板
0
投稿

猜你喜欢

  • Springboot实现多数据源切换详情

    2023-06-12 12:02:43
  • Maven插件的安装及使用

    2022-04-05 04:38:30
  • Java关键字之this用法详解

    2022-03-23 21:43:22
  • C#语法之泛型的多种应用

    2022-03-15 02:02:43
  • C#语言中条件与&&与条件或||的区别

    2022-10-06 22:51:55
  • Java线程安全的计数器简单实现代码示例

    2023-11-09 15:41:57
  • C#中==(双等于号)与equals()区别详解

    2021-09-21 18:49:42
  • mybatis-plus 返回部分字段的解决方式

    2023-03-25 14:45:04
  • java面试常问的Runnable和Callable的区别

    2023-11-23 09:23:28
  • android 调用系统的照相机和图库实例详解

    2022-01-02 11:46:47
  • Android编程设计模式之迭代器模式详解

    2023-06-07 01:25:42
  • Android 7.0 Nougat不得不知的11项新功能

    2021-06-12 22:50:07
  • Java中的引用类型和使用场景详细

    2023-11-29 03:58:19
  • IDEA自定义常用代码块及自定义快捷摸板

    2022-01-13 18:54:22
  • Springboot - Fat Jar示例详解

    2023-11-19 21:28:35
  • 详解如何在Java中实现堆排序算法

    2023-11-11 11:34:46
  • Unity打包代码到DLL的实现

    2022-06-28 08:38:17
  • MyBatis3用log4j在控制台输出SQL的方法示例

    2023-07-01 07:32:36
  • 线程阻塞唤醒工具 LockSupport使用详解

    2023-11-29 17:16:10
  • java使用gzip实现文件解压缩示例

    2021-09-05 06:36:23
  • asp之家 软件编程 m.aspxhome.com