首先新建一个项目工程,建立文件,如下图所示

首先配置页面布局文件activity_main.xml,如下图所示:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/iv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/bg"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="画笔的粗细"

/>

android:id="@+id/sb"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:max="256"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="颜色"

/>

android:id="@+id/sp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:entries="@array/color"

/>

android:id="@+id/btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="保存"

/>

然后书写主页的代码MainActivity.java代码如下

package com.xunfang.drawing;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.Bitmap.CompressFormat;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.util.MonthDisplayHelper;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnTouchListener;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.AdapterView.OnItemSelectedListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.SeekBar;

import android.widget.Spinner;

import android.widget.Toast;

public class MainActivity extends Activity {

private SeekBar sb;

private ImageView iv;

private Button btn;

private Spinner sp;

private String[] color ;

private Bitmap bm;

private Bitmap copy;

private Canvas canvas;

private Paint paint;

private File file;

private int yanse;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//拿到在xml文件中定义的颜色数组

color = getResources().getStringArray(R.array.color) ;

//实例化

initData();

//设置监听器

setLister();

//画画

loadingImage();

}

private void loadingImage() {

// 加载原始图片

bm = BitmapFactory.decodeResource(getResources(), R.drawable.bg);

// 需要创建一个和原始的图片大小一样的空白图片(一张纸,上面没有任何数据)

copy = bm.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());

// 需要一个画板,画板上铺上白纸

canvas= new Canvas(copy);

// 创建画笔

paint= new Paint();

// 给imageView空间加载一个滑动监听器

iv.setOnTouchListener(new OnTouchListener() {

int startx;

int starty;

@Override

public boolean onTouch(View v, MotionEvent event) {

// 拿到动作

int type = event.getAction();

switch (type) {

case MotionEvent.ACTION_DOWN:

startx = (int) event.getX();

starty = (int) event.getY();

break;

case MotionEvent.ACTION_MOVE:

int endx = (int) event.getX();

int endy = (int) event.getY();

//画画

canvas.drawLine(startx, starty, endx, endy, paint);

startx = (int) event.getX();

starty = (int) event.getY();

iv.setImageBitmap(copy);

break;

case MotionEvent.ACTION_UP:

break;

}

return true;

}

});

}

private void setLister() {

//下拉框

sp.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override

public void onItemSelected(AdapterView<?> parent, View view,

int position, long id) {

Toast.makeText(getApplicationContext(), "你点击的是:" + color[position], 0).show();

switch (position) {

case 1:

paint.setColor(Color.GREEN);

break;

case 2:

paint.setColor(Color.BLUE);

break;

case 3:

paint.setColor(Color.BLACK);

break;

case 4:

paint.setColor(Color.YELLOW);

break;

case 0:

paint.setColor(Color.RED);

break;

}

}

@Override

public void onNothingSelected(AdapterView<?> parent) {

}

});

//保存

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

try {

//指定图片的存储路径

file = new File(Environment.getExternalStorageDirectory().getAbsoluteFile()+"/draw.png");

FileOutputStream fos = new FileOutputStream(file);

copy.compress(CompressFormat.PNG, 100, fos);

Toast.makeText(getApplicationContext(), "保存成功", 0).show() ;

} catch (Exception e) {

}

//欺骗系统,告诉系统插入一个sd卡

Intent intent = new Intent();

intent.setAction(intent.ACTION_MEDIA_MOUNTED);

intent.setData(Uri.fromFile(file));

sendBroadcast(intent);

}

});

}

private void initData() {

sb = (SeekBar) findViewById(R.id.sb);

btn = (Button) findViewById(R.id.btn);

sp = (Spinner) findViewById(R.id.sp);

iv = (ImageView) findViewById(R.id.iv);

}

}

AndroidManifest.xml配置文件如下:

package="com.xunfang.drawing"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="16"

android:targetSdkVersion="21" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name=".MainActivity"

android:label="@string/app_name" >

然后用虚拟机测试如下所示:

可以在模拟器看一下,生成的文件

表示验证成功了

Android可滑动画板,Android 利用 Canvas 画画板相关推荐

  1. 如何利用canvas画一个圆,并且填充颜色

    如何利用canvas画一个圆,并且填充颜色(小白专用,大佬勿看) canvas基础 相信在此之前,你对canvas已经有一定的了解了,接下来我将介绍,如何利用canvas画一个圆. 1.新建一个htm ...

  2. Android之Canvas画画板

    前几篇都涉及到了Canvas,Paint,Bitmap的结合使用,这里就不多说了~ 现在我要写的是画画板这个项目~ 项目效果: 1.画笔的颜色的随意更改 2.画笔的大小也可以随着拖动条的拖动而改变 3 ...

  3. android手势滑动页面,Android 手势识别 (左右滑动)实现 页面 切换

    要实现 页面左右滑动的效果  就一定要由手势识别器, 就是这个对象 GestureDetector. 用法其实很简单,这里 写一下 方便以后用到的时候好找. 步骤就是 这样子 123.. 1. 初始化 ...

  4. android gridview滑动卡,Android RecyclerView的卡顿问题

    本文其实是上一篇Android本地app操作相关基础的延伸,然而内容基本没什么联系了(初学者身份瞬间暴露,打一枪换一个地方←_←),就不好意思再添个"续"或者"(2)&q ...

  5. Android钢琴滑动代码,android 钢琴界面实现

    近在做一个钢琴的东西,关于这个界面如何设计画了很长时间,主要是考虑到针对不同的分辨率,如果只针对一种分辨率的话用绝对布局可以实现,实现的基本思想是每个白色的键的位置是可以计算出来的,屏幕的宽度可以获得 ...

  6. android左右滑动fragment,Android基于ViewPager+Fragment实现左右滑屏效果的方法

    本文实例讲述了Android基于ViewPager+Fragment实现左右滑屏效果的方法.分享给大家供大家参考,具体如下: 1.xml布局模板 android:id="@+id/local ...

  7. Android钢琴滑动代码,Android实现简易版弹钢琴效果

    本文实例为大家分享了Android实现弹钢琴效果展示的具体代码,供大家参考,具体内容如下 目标效果: 1.drawable下新建button_selector.xml页面: 2.drawable下新建 ...

  8. 小程序canvas画画板签字版,touchmove时卡顿的问题(根本原因是因为vue语法中page.data导致视图层和逻辑层的频繁通讯导致)

    起因 因为要做一个画画板的功能,所以使用了canvas组件,一开始好多人说小程序canvas性能特别差,也没太注意,做出来之后确实有点卡,而且每一笔touchmove时间越长越卡,最终导致页面卡到无法 ...

  9. android 横向滑动 回弹,android ScrollView水平滑动回弹

    在研究了View的一些属性之后做了个Scroll的水平滑动回弹. 效果图: 主要代码: import android.content.Context; import android.graphics. ...

最新文章

  1. ubuntu 刷 android 5.0,IT之家学院:将刷了Ubuntu Touch的魅族PRO 5恢复为安卓系统
  2. MySQL字符串函数
  3. QCustomplot设置背景为透明色
  4. JAVA 学到什么水平就可以转战 Android 了?
  5. mysql gone away 测试_python测试开发django-58.MySQL server has gone away错误的解决办法
  6. 京东 你访问的页面需要验证证书_SSL证书安全认证有什么原理?
  7. 音视频技术开发周刊 | 186
  8. 解决:elasticsearch 更新报错:The number of object passed must be even but was [1]
  9. 用EnumMap代替序数索引
  10. 运用高斯核模型进行最小二乘回归_数据科学 | 第8讲:模型选择与正则化
  11. Silverlight+WCF 新手实例 象棋 介绍II(九)
  12. C++基础学习9:构造函数和析构函数
  13. 计算机工具栏文件夹选项在哪里,windows10系统下工具栏里找不到文件夹选项如何解决...
  14. 揭秘720°三维全景3D实景地图制作技术
  15. matlab按图像边缘抠图_不会抠图?保姆级抠图教程!手把手教你抠图(二)
  16. Java集合容器面试题(2020最新版),深入理解linux内核百度网盘
  17. Linux修改默认静态IP
  18. Python 思维锻炼
  19. 数量积、向量积与混合积
  20. Java网络爬虫Spider

热门文章

  1. BGP 13条选路规则
  2. pySpark加载数据
  3. docker-maven-plugin 发布镜像到 window环境的docker服务器
  4. ahp层次分析法软件
  5. 蓝桥杯51单片机之利用中断实现倒计数与停表【单片机开发初学者掌握案例】
  6. Python之网络编程(基于tcp实现远程执行命令)
  7. 初学者python笔记(迭代器、生成器、三元表达式、列表解析、send()与yield())
  8. linux make乱码,linux乱码
  9. mysql存储过程 try_mysql存储过程之异常处理篇
  10. android地图定位到海洋,GPS定位技术进行高精度海洋定位的应用