package com.sonzer.CanvasDemo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
/**
* 绘图常用方法演示
* @author sonzer
*
*/
public class CanvasView extends View {
private Paint mPaint1 = null;
private Bitmap mBitmap = null;
public CanvasView(Context context) {
super(context);
// 初始化画笔
mPaint1 = new Paint();
mPaint1.setColor(Color.RED);// 设置笔刷颜色
mPaint1.setStrokeWidth(2);// 设置笔刷粗细
mPaint1.setAntiAlias(true);// 设置抗锯齿
//初始化图片
mBitmap = ((BitmapDrawable) getResources().getDrawable(
R.drawable.sonzer_pic)).getBitmap();
mBitmap = rotate(mBitmap, 10, 0, 0);// 图像旋转
mBitmap = scale(mBitmap, 0.3f, 0.3f, 0, 0);// 图像缩放
mBitmap = dispose(mBitmap, mBitmap.getWidth(), mBitmap.getHeight());// 灰度处理
// 抗锯齿(感觉不明显)
// canvas.setDrawFilter(new PaintFlagsDrawFilter(0,
// Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
alphaAnimation();//透明度渐变动画
// translateAnimation();//平移动画
// scaleAnimation();//缩放动画
// rotateAnimation();//旋转动画
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);// 设置画布背景颜色
canvas.clipRect(0, 0, 320, 480);// 设置画布范围
canvas.drawLine(20, 20, 100, 30, mPaint1);// 绘制线段
canvas.drawPoint(60, 50, mPaint1);// 绘制点
canvas.drawRect(new Rect(20, 70, 120, 100), mPaint1); // 绘制矩形
canvas.drawRoundRect(new RectF(140, 70, 230, 100), 10, 10, mPaint1); // 绘制圆角矩形
canvas.drawCircle(50, 140, 30, mPaint1);// 绘制圆形
canvas.drawArc(new RectF(140, 110, 230, 170), 180, 90, true, mPaint1);// 绘制圆弧
canvas.drawOval(new RectF(240, 110, 280, 170), mPaint1);// 绘制椭圆形
canvas.drawText("绘制文字", 20, 200, mPaint1);// 绘制文字
float[] points = new float[] { 35, 220, 20, 250, 20, 250, 50, 250, 35,
220, 50, 250 };
canvas.drawLines(points, mPaint1);// 绘制线段序列,相当3条线,6个坐标
canvas.drawBitmap(mBitmap, 20, 270, null);// 绘制图片
}
/**
* 图像旋转
*
* @param mBitmap
* @param angle
* @param px
* @param py
* @return
*/
public Bitmap rotate(Bitmap mBitmap, float angle, float px, float py) {
Matrix matrix = new Matrix();
matrix.reset();
matrix.setRotate(angle, px, py);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(),
mBitmap.getHeight(), matrix, true);
return mBitmap;
}
/**
* 图像缩放
*
* @param sx
* @param sy
* @param px
* @param py
* @return
*/
public Bitmap scale(Bitmap mBitmap, float sx, float sy, float px, float py) {
Matrix matrix = new Matrix();
matrix.reset();
matrix.setScale(sx, sy, px, py);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(),
mBitmap.getHeight(), matrix, true);
return mBitmap;
}
/**
* 灰度处理
*
* @param mBitmap
* @param width
* @param height
* @return
*/
public Bitmap dispose(Bitmap mBitmap, final int width, final int height) {
int bitmap[] = new int[width * height];
mBitmap.getPixels(bitmap, 0, width, 0, 0, width, height);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int index = i * width + j;
// 获取RGB值
int r = (bitmap[index] >> 16) & 0xff;
int g = (bitmap[index] >> 8) & 0xff;
int b = (bitmap[index]) & 0xff;
// 计算灰度值
double gray = r * 0.3 + g * 0.59 + b * 0.11;
// 0xff000000 | (R << 16) | (G << 8) | B
bitmap[index] = 0xff000000 | ((int) gray << 16)
| ((int) gray << 8) | (int) gray;
}
}
Bitmap bm = Bitmap.createBitmap(width, height, Config.ARGB_4444);
bm.setPixels(bitmap, 0, width, 0, 0, width, height);
mBitmap = bm;
bitmap = null;
return mBitmap;
}
/**
* 透明度渐变动画
*/
public void alphaAnimation() {
Animation alpha = new AlphaAnimation(0.0f, 1.0f);
alpha.setDuration(3000);
this.startAnimation(alpha);
}
/**
* 平移动画
*/
public void translateAnimation() {
Animation translate = new TranslateAnimation(10, 100, 10, 100);
translate.setDuration(3000);
this.startAnimation(translate);
}
/**
* 缩放动画
*/
public void scaleAnimation() {
Animation scale = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
scale.setDuration(3000);
this.startAnimation(scale);
}
/**
* 旋转动画
*/
public void rotateAnimation() {
Animation rotate = new RotateAnimation(0.0f, 360.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
rotate.setDuration(3000);
this.startAnimation(rotate);
}
}
分享到:
相关推荐
NULL 博文链接:https://hsx9566.iteye.com/blog/1068872
android 画图小例子 android 画图小例子 android 画图小例子
Android绘图常用方法有哪些,下面一一为大家列举: 1、有关画笔(Paint)的方法 Paint mPaint= new Paint(); mPaint.setAntiAlias(true); // 消除锯齿 mPaint.setStrokeWidth(mCircleWidth); // 设置圆环的宽度 ...
在Android自定义View的时候,我们经常需要绘制一些自己想要的效果。这里就需要使用Canvas对象。下面这篇文章将Canvas对象常用方法做个笔记,方便自己和大家以后使用的时候查阅,下面来一起看看吧。
drawXxx方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前面绘画的图层。 clipXXX方法族:在当前的画图区域裁剪(clip)出一个新的画图区域,这个 画图区域就是canvas对象的...
java画图板 源码 收集Android studio 常用的插件 【目录】 【详情】 Exynap Effortless Android Development [官网地址]() android-butterknife-zeleznyandroid-butterknife-zelezny 是根据butterknife定制的一款...
对于Android应用开发工程师而言,本书中关于Binder,以及sp、wp、Handler和Looper等常用类的分析或许能帮助你迅速适应Android平台上的开发工作。 (2)Android系统开发工程师 Android系统开发工程师常常需要...
前文常用的控件介绍了不少,现在就来讨论一下手机开发中常用到的画图。要掌握Android的画图,首先就要了解一下,基本用到的如下一些图形接口: 1.Bitmap,可以来自资源/文件,也可以在程序中创建,实际上的功能相当...
本文重在对自定义view,以及其常用类,常用方法的初步了解,提供一个思路,效果是其次,画板只是例子,需要的朋友可以参考下
在andorid或者java中我们主要是使用MD5Utils工具进行加密 默认使用标准加密方式 例如 我们可以在我们要加密的地方 这样做 String password = "123456"; MD5Utils.encode(password); 这里有一个MD5Utils的小加密...
8.3.4 Surface和画图 / 307 8.3.5 初识Surface小结 / 309 8.4 深入分析Surface / 310 8.4.1 与Surface相关的基础知识介绍 / 310 8.4.2 SurfaceComposerClient分析 / 315 8.4.3 SurfaceControl分析 / 320 8.4.4 ...
8.3.4 Surface和画图 8.3.5 初识Surface小结 8.4 深入分析Surface 8.4.1 与Surface相关的基础知识介绍 8.4.2 SurfaceComposerClient分析 8.4.3 SurfaceControl分析 8.4.4 writeToParcel和Surface对象的创建 8.4.5 ...
绘画板,支持平滑跟随,常用形状,图层变换 Import JitPack Add it in your project's build.gradle at the end of repositories: repositories { // ... maven { url "https://jitpack.io" } } Step 2. Add the ...
内含3D相册图片滑动+倾斜+放大+倒影处理,Google官网的图片缓存,PhotoStore图片浏览器,常用图片特效处理,多种统计图表,二维码识别,仿美图秀秀和IOS系统的相机胶卷,画图程序,画图工具, 区域截图, 水果相册...
很多常用的手机图标!小图多,如果要用大图,稍微做下,美图或者画图板都行,PS小郭最好
安卓画板功能源码,这个源码功能比较简单的,实现了我们常用的画图的功能的,源码比较清晰啊,开发类似的功能的朋友可以学习一下吧。
所有这一切都伴随着对三星S-Pen和Android共享系统的表现功能的支持,因此您可以向您的朋友展示您的艺术。 ArtRage 安卓版ArtRage 安卓版 ArtRage 主要特点: 真实世界的绘画工具包括油,水彩,油漆滚筒,铅笔,蜡笔...