Bitmap绘图
来源:互联网 发布:美容美发管理软件源码 编辑:程序博客网 时间:2024/05/22 04:43
自定义绘图 View
package com.test.jiazaibigimage;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by Administrator on 2016/6/25. */public class DrawView extends View { float preX; float preY; private Path path; public Paint mPaint = null; public static final int VIEW_WIDTH = 1080; public static final int VIEW_HEIGHT = 1920; //定义一个副本的图片,该图片作为缓冲区 Bitmap copyBitmap = null; //定义 copyBitmap上 Canvas对象 Canvas copyCanvas = null; public DrawView(Context context, AttributeSet attrs) { super(context, attrs); **//创建一个和 View相同大小的 副本 copyBitmap = Bitmap.createBitmap(VIEW_WIDTH, VIEW_HEIGHT, Bitmap.Config.ARGB_8888);** copyCanvas = new Canvas(); path = new Path(); //设置将 copyCanvas 将会绘制到 copyBitmap 上 copyCanvas.setBitmap(copyBitmap); //设置画笔的颜色 mPaint = new Paint(Paint.DITHER_FLAG); mPaint.setColor(Color.RED); //设置画笔的风格 mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(2); //抗锯齿 mPaint.setAntiAlias(true); mPaint.setDither(true); } @Override public boolean onTouchEvent(MotionEvent event) { //获取拖动事件的发生位置 float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: path.moveTo(x, y); preX = x; preY = y; break; case MotionEvent.ACTION_MOVE: path.quadTo(preX, preY, x, y); preX = x; preY = y; break; case MotionEvent.ACTION_UP: copyCanvas.drawPath(path, mPaint); path.reset(); break; } invalidate(); return true; //返回 true 表示自己出来该方法 } @Override protected void onDraw(Canvas canvas) { Paint bmpPaint = new Paint(); //将 copyBitmap 绘制到 该组件上 canvas.drawBitmap(copyBitmap, 0, 0, bmpPaint); canvas.drawPath(path, mPaint); }}
绘图的主界面
package com.test.jiazaibigimage;import android.graphics.BlurMaskFilter;import android.graphics.Color;import android.graphics.EmbossMaskFilter;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;/** * 绘图的主界面 */public class DrawViewActivity extends AppCompatActivity { EmbossMaskFilter emboss; // emboss可以翻译成 浮雕 BlurMaskFilter blur; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_draw_view); emboss = new EmbossMaskFilter(new float[]{1.5f, 1.5f, 1.5f}, 0.6f, 6, 4.2f); blur = new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL); } //负责创建选项菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = new MenuInflater(this); //加载对应的布局文件 inflater.inflate(R.menu.my_menu, menu); return super.onCreateOptionsMenu(menu); } //菜单项被单击后的回调方法 @Override public boolean onOptionsItemSelected(MenuItem item) { DrawView drawView = (DrawView) findViewById(R.id.draw); //判断点击的是哪个菜单项,并有做出相应的处理 switch (item.getItemId()) { case R.id.red: drawView.mPaint.setColor(Color.RED); item.setCheckable(true); break; case R.id.green: drawView.mPaint.setColor(Color.GREEN); item.setCheckable(true); break; case R.id.blue: drawView.mPaint.setColor(Color.BLUE); item.setCheckable(true); break; case R.id.width_1: drawView.mPaint.setStrokeWidth(1); break; case R.id.width_3: drawView.mPaint.setStrokeWidth(3); break; case R.id.width_5: drawView.mPaint.setStrokeWidth(15); break; case R.id.blur: drawView.mPaint.setMaskFilter(blur); break; case R.id.emboss: drawView.mPaint.setMaskFilter(emboss); break; } return true; }}
菜单布局文件
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="@string/color"> <menu> <!--定义一组单选菜单项--> <group android:checkableBehavior="single"> <!--定义多个菜单项--> <item android:id="@+id/red" android:title="@string/color_red"/> <item android:id="@+id/green" android:title="@string/color_green"/> <item android:id="@+id/blue" android:title="@string/color_blue"/> </group> </menu> </item> <item android:title="@string/width"> <menu> <!--定义一组菜单项--> <group> <!--定义三个菜单项--> <item android:id="@+id/width_1" android:title="@string/width_1"/> <item android:id="@+id/width_3" android:title="@string/width_3"/> <item android:id="@+id/width_5" android:title="@string/width_5"/> </group> </menu> </item> <item android:id="@+id/blur" android:title="@string/blur"/> <item android:id="@+id/emboss" android:title="@string/emboss"/></menu>
布局xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <com.test.jiazaibigimage.DrawView android:id="@+id/draw" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
0 0
- Bitmap绘图
- 绘图Bitmap
- Bitmap绘图
- 安卓 bitmap绘图
- CRectTracker, 绘图及BITMAP积累
- Android 高级绘图 Canvas, Paint , Bitmap
- Android绘图-Paint、Canvas、Bitmap、BitmapFactory
- android 在Bitmap上进行绘图操作
- IOS 绘图 bitmap 滤镜 图片合成
- Android xml绘图(一)-----------Bitmap
- Android opengl ES 实现后台绘图并保存成bitmap
- android之绘图——Canvas,bitmap,Paint的理解
- Android opengl ES实现后台绘图并保存为bitmap
- Android双缓冲绘图 Bitmap和Canvas 一看就懂
- Android opengl ES 实现后台绘图并保存成bitmap
- Android绘图总结(Bitmap,Canvas,Paint,圆角)
- Android中XML绘图:Bitmap/Shape/Seletor和Layer
- Bitmap
- mysql二进制日志设置
- Problem C: C语言习题5.24--文件操作1
- Swift - 图像控件(UIImageView)的用法
- 破解安装 SecureCRT 7.0.2 for mac完美破解版,mac secureCRT , apple secureCRT
- Fresco图片加载框架的介绍,相关开源库以及工具类的封装
- Bitmap绘图
- Problem D: C语言习题5.25--文件操作2
- QQ第三方登陆,上拉加载下拉刷新XListView结合微信精选第三方分享加ImageLoad
- go语言 - 设计哲学
- Python案例-开发之路-计算器
- 提问的智慧,大致看了一下,很多点没消化,要多看几遍,多理解。感谢作者分享!
- Problem D: C语言习题5.25--文件操作2
- mysql配置优化
- 使用 RMI + ZooKeeper 实现远程调用框架