画画板--第三方开源--DrawableView
来源:互联网 发布:get 软件 自营 编辑:程序博客网 时间:2024/04/29 04:45
Android上的第三方开源DrawableView支持手写,类似于写字板。DrawableView支持改变画笔颜色,画笔线条粗细,画布的手势缩放和拖曳显示部分区域。并最终支持将手绘的图保存到本地。
在github上的项目主页:https://github.com/PaNaVTEC/DrawableView
先把布局文件中写一个DrawableView:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:padding="5dp" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zzw.testdrawableview.MainActivity" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/subWidth" android:layout_width="36dp" android:layout_height="36dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="@drawable/sub" /> <Button android:id="@+id/addWidth" android:layout_width="36dp" android:layout_height="36dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:background="@drawable/add" /> <Button android:id="@+id/sava" android:layout_width="36dp" android:layout_height="36dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:background="@drawable/sava" /> <Button android:id="@+id/PaintColor" android:layout_width="36dp" android:layout_height="36dp" android:layout_alignParentTop="true" android:layout_marginRight="50dp" android:layout_toLeftOf="@+id/sava" android:background="@drawable/rand" /> <Button android:id="@+id/undo" android:layout_width="36dp" android:layout_height="36dp" android:layout_alignParentTop="true" android:layout_marginLeft="50dp" android:layout_toRightOf="@+id/sava" android:background="@drawable/ret" /> </RelativeLayout> <me.panavtec.drawableview.DrawableView android:id="@+id/paintView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_weight="1" /></LinearLayout>
JAVA代码:
package com.zzw.testdrawableview;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Color;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;import me.panavtec.drawableview.DrawableView;import me.panavtec.drawableview.DrawableViewConfig;public class MainActivity extends Activity implements OnClickListener { private DrawableView drawableView; private DrawableViewConfig config; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); config = new DrawableViewConfig(); drawableView = (DrawableView) findViewById(R.id.paintView); Button addWidth = (Button) findViewById(R.id.addWidth); Button subWidth = (Button) findViewById(R.id.subWidth); Button PaintColor = (Button) findViewById(R.id.PaintColor); Button undo = (Button) findViewById(R.id.undo); Button sava = (Button) findViewById(R.id.sava); addWidth.setOnClickListener(this); subWidth.setOnClickListener(this); PaintColor.setOnClickListener(this); undo.setOnClickListener(this); sava.setOnClickListener(this); // 画笔颜色 config.setStrokeColor(Color.RED); // 画布边界 config.setShowCanvasBounds(true); // 设置画笔宽度 config.setStrokeWidth(10.0f); // 缩放 config.setMinZoom(1.0f); config.setMaxZoom(3.0f); // 画布宽和高 config.setCanvasHeight(3000); config.setCanvasWidth(2000); drawableView.setConfig(config); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.addWidth: // 设置每次增加10.0的宽度 config.setStrokeWidth(config.getStrokeWidth() + 10); Toast.makeText(getApplicationContext(), "当前画笔宽度:" + config.getStrokeWidth(), 0).show(); break; case R.id.subWidth: // 设置每次减少10.0的宽度 if (config.getStrokeWidth() > 10) { config.setStrokeWidth(config.getStrokeWidth() - 10); Toast.makeText(getApplicationContext(), "当前画笔宽度:" + config.getStrokeWidth(), 0).show(); } break; case R.id.PaintColor: // 测试期间,随机生成一种颜色 int r1 = (int) (Math.random() * 256); int r2 = (int) (Math.random() * 256); int r3 = (int) (Math.random() * 256); config.setStrokeColor(Color.argb(255, r1, r2, r3)); Toast.makeText(getApplicationContext(), "颜色生成成功", 0).show(); break; case R.id.undo: drawableView.undo(); break; case R.id.sava: try { savaBitmapToSDCard(); } catch (IOException e) { e.printStackTrace(); } break; } } // 将用户手绘的DrawableView转化为图片保存到本地系统默认的图片库中。 private void savaBitmapToSDCard() throws IOException { // 从DrawableView获得Bitmap Bitmap bmp = drawableView.obtainBitmap(); // 获取保存的路径 File parent_path = Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); File f = new File(parent_path.getAbsoluteFile(), "myDrawableView.png"); f.createNewFile(); Log.d("保存路径", f.getAbsolutePath()); FileOutputStream fos = new FileOutputStream(f); bmp.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); fos.close(); Toast.makeText(getApplicationContext(), "保存成功,保存路径" + f.getAbsolutePath(), 1).show(); }}
默认的,在未发布的debug阶段,DrawableView会在画布上添加一些log日志输出。如果不打算在画布中显示log,可以修改DrawableView的源代码去掉DrawableView默认的log日志。关键代码有两行,在CanvasDrawer的库文件源代码中:
1 initLogger();2 3 ...4 5 canvasLogger.log(canvas, canvasRect, viewRect, scaleFactor);
将这两行注释掉即可,如图:
0 0
- 画画板--第三方开源--DrawableView
- 画画板
- 画画板
- 画画板
- android画画板
- 图片画画板
- 图片画画板
- iOS 画画板
- iOS_24_画画板(含取色板)
- android 画画板
- 画画板原理
- andorid画画板
- 图片画画板
- Android画画板剖析
- android_65_简易画画板
- Android 画画板
- 画画板案例
- Android画画板
- “[DBNETLIB][ConnectionOpen(connect()).]SQL Server 不存在或拒绝访问 ”的解决方法之一
- seeting菜单界面形成--优化
- MPAndroidChart开源图表库(一)之饼状图
- Java并发库(十九):同步集合类的使用BlockingQueue、
- 训练自己
- 画画板--第三方开源--DrawableView
- bless 概念
- AngularJS进阶(二十二)实现时间选择插件
- 微信编辑器——构思编辑器教你如何学好图文排版
- angular学习日志06 form表单 ng-submit
- Android开发总结笔记 SharePreference(偏好参数) 2-1
- jsp URL中文传参乱码问题
- 财付通接入流程
- erlang 各版本安装