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

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

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

(0)

相关推荐

  • Android画画板的制作方法

    本文实例为大家分享了Android画画板展示的具体代码,供大家参考,具体内容如下 main.xml布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_w

  • Android实现画板、写字板功能(附源码下载)

    前言 本文给大家分享一个使用Android开发写字板功能Dem.简单操作内存中的图像.对图像进行简单的处理.绘制直线.以达到写字板的效果 效果图如下 XML布局代码 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="

  • Android采用双缓冲技术实现画板

    本文实例为大家分享了Android实现画板的具体代码,采用的技术是双缓冲技术,供大家参考,具体内容如下 1.双缓冲技术的概念 所谓的双缓冲技术其实很简单,当程序需要在指定的View上进行绘制时,程序并不需要直接绘制到该View组件,而是先绘制到一个内存中的Bitmap图片上(就是缓冲),等内存中的Bitmap绘制好之后,再一次性将Bitmap绘制到View组件上. 2.Android采用双缓冲实现画板  实现的思路: 1).定义一个内存中图片,将他作为缓冲区Bitmap cacheBitmap

  • Android自定义SurfaceView实现画板功能

    接触了这么久的View,总不能一直停留在View里,现在开始呢,就要学习一个新的知识点:SurfaceView,实际上SurfaceView与View的原理都差不多,只是效率和渲染方式上,SurfaceView要优于View,这也是我们写这个的原因.今天就看看这个SurfaceView,好了,下面就是今天要说的效果. 界面很简单,就是一个按钮以及一个画板,先看看界面的代码吧 <LinearLayout xmlns:android="http://schemas.android.com/ap

  • android实现简单的画画板实例代码

    直接看代码,注释都写清楚了 复制代码 代码如下: public class MainActivity extends Activity { private ImageView iv; private Bitmap baseBitmap; private Canvas canvas; private Paint paint; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedIns

  • 双缓冲技术实现Android 画板应用

    什么是双缓冲技术?双缓冲技术就是当用户操作界面完成后,会有一个缓冲区保存用户操作的结果. 为什么要使用双缓冲技术?拿Android 游戏开发来说,界面贞每次都是全部重画的,也就说画了新的,旧的就没了,所以需要使用双缓冲技术保存之前的内容. 如何实现双缓冲?使用一个Bitmap对象保留之前的画布即可. package com.example.phonegaptest; import android.content.Context; import android.graphics.Bitmap; i

  • Android多媒体之画画板开发案例分享

    先看看效果: 其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了. 核心代码 : public class MainActivity extends Activity implements OnClickListener,OnSeekBarChangeListener { private View red_view,green_view,blue_view; //控制画笔颜色的三块区域 private SeekBar se

  • iOS简单画板开发案例分享

    最近在学习Quartz2D,学习了一个简单画板的实现,现在把实现过程记录一下. 主要用到的点就是画线,截屏,绘制图片,选择图片,以及保存所有绘制的线. 首先在storyboard上布局好控件,设置约束等等,最后的效果是这样: 自定义画板DrawView,使用时可能是从xib中加载,也可能是手动创建,所以创建对象的方法需要实现两个: #import <UIKit/UIKit.h> @interface DrawView : UIView /** 线宽 */ @property (nonatomi

  • Android扫描本地音乐文件开发案例分享

    一.前言 本来觉得so easy,真是没想到,还搞了老半天,搞的我大汗淋漓,要拍桌子摔键盘了. 本想实现的功能是: 通过网易云音乐/百度音乐/QQ音乐/酷狗音乐中一个API,通过关键词/歌手/歌词来搜索相关歌曲信息,然后在线播放.下载到本地,不过目前来看,使用API还是有一点问题.通过浏览器访问,问题不大,例如下图: 但是想通过手机访问的时候,问题就出现了,同样的参数,结果很不一样,而且基本搜不到自己想要的,后来换做通过自己的服务器去访问,还是搜不到,后来查了一下资料,暂时也没解决.于是,目前就

  • iOS抽屉效果开发案例分享

    本文实例为大家分享了iOS抽屉效果开发实例,供大家参考,具体内容如下 在显示在窗口的控制器上添加三个view(如果只需要往一边滑动就只加2个view) 先声明三个view #import "ViewController.h" @interface ViewController () @property(nonatomic, weak) UIView *mainV; @property(nonatomic, weak) UIView *leftV; @property(nonatomic

  • Android手机闹钟服务AlarmManagerk开发案例

    AlarmManager通常用来开发手机闹钟,并且它是一个全局定时器,可在指定时间或指定周期启动其他组件(包括Activity,Service,BroadcastReceiver) 获取AlarmManager对象: getSystemService(Service.ALARM_SERVICE) 调用其中的方式设置定时器启动指定组件: set(int type,long triggerAtTime,PendingIntent operation)设置在TriggerAtTime时间启动由oper

  • iOS时钟开发案例分享

    本文实例为大家介绍了iOS时钟开发过程,供大家参考,具体内容如下 思路就是利用CALayer的隐式动画来实现.因为UIView的非根层也就是手动创建的layer在其属性发生变化时会默认会产生动画效果,这些属性也叫作可动画属性.比如bounds.backgroundColor.position. 时钟里面表盘就是一个UIView,而三根针就是三个手动创建的layer. 先在storyboard上弄一个UIImageView,设置表盘图片 然后在viewDidLoad中初始化三根针,并设置定时器,获

  • Android实现画画板案例

    本文实例为大家分享了Android实现画画板的具体代码,供大家参考,具体内容如下 ① 准备一个布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&q

  • Android多功能时钟开发案例(实战篇)

    上一篇为大家介绍的是Android多功能时钟开发基础内容,大家可以回顾一下,Android多功能时钟开发案例(基础篇) 接下来进入实战,快点来学习吧. 一.时钟 在布局文件中我们看到,界面上只有一个TextView,这个TextView的作用就是显示一个系统的当前时间,同时这个时间还是一秒一秒跳的,要实现一秒一秒的跳就需要我们每隔一秒就要刷新一下,同时我们这里还考虑了切换到另一个Tab的时候,这个时间就不跳动了,这样就会减少这个对系统的占用,考虑到了这点我们在这里用到了Handler,通过han

  • Android Notification.Builder通知案例分享

    随着Android系统的不断升级,相关Notification的用法有很多种,有的方法可能已经被android抛弃了,下面为大家分享一下个人如何实现Android Notification通知小案例源代码,供大家参考. Android Notification.Builder通知小案例,具体代码示例如下: package com.example.day6ke; import android.app.Notification; import android.app.NotificationMana

随机推荐