一、
Bitmap想象成一张图片
Bitmap 提供了一些静态方法createBitmap可以源bitmap就行缩放,截取,pathName中解析。
回收自己,与判断是否被回收
BitMapDrawable封装了bitmap
BitmapFactory
二、绘图
步骤1 自定义一个view 继承 View
步骤2 重写onDraw(Canavs)方法 画布
Paint 画笔 。使用画笔在画布上画画
Path 多条直线连接而成的图形
/** * */ package org.crazyit.image; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; import android.graphics.Shader; import android.util.AttributeSet; import android.view.View; /** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class MyView extends View { public MyView(Context context, AttributeSet set) { super(context, set); } @Override // 重写该方法,进行绘图 protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 把整张画布绘制成白色 canvas.drawColor(Color.WHITE); Paint paint = new Paint(); // 去锯齿 // paint.setAntiAlias(true); paint.setColor(Color.BLUE); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(3); // 绘制圆形 canvas.drawCircle(40, 40, 30, paint); // 绘制正方形 canvas.drawRect(10, 80, 70, 140, paint); // 绘制矩形 canvas.drawRect(10, 150, 70, 190, paint); // 绘制圆角矩形 RectF re1 = new RectF(10, 200, 70, 230); canvas.drawRoundRect(re1, 15, 15, paint); // 绘制椭圆 RectF re11 = new RectF(10, 240, 70, 270); canvas.drawOval(re11, paint); // 定义一个Path对象,封闭成一个三角形。 Path path1 = new Path(); path1.moveTo(10, 340); path1.lineTo(70, 340); path1.lineTo(40, 290); path1.close(); // 根据Path进行绘制,绘制三角形 canvas.drawPath(path1, paint); // 定义一个Path对象,封闭成一个五角形。 Path path2 = new Path(); path2.moveTo(26, 360); path2.lineTo(54, 360); path2.lineTo(70, 392); path2.lineTo(40, 420); path2.lineTo(10, 392); path2.close(); // 根据Path进行绘制,绘制五角形 canvas.drawPath(path2, paint); // ----------设置填充风格后绘制---------- paint.setStyle(Paint.Style.FILL); paint.setColor(Color.RED); canvas.drawCircle(120, 40, 30, paint); //绘制正方形 canvas.drawRect(90, 80, 150, 140, paint); //绘制矩形 canvas.drawRect(90, 150, 150, 190, paint); RectF re2 = new RectF(90, 200, 150, 230); //绘制圆角矩形 canvas.drawRoundRect(re2, 15, 15, paint); RectF re21 = new RectF(90, 240, 150, 270); // 绘制椭圆 canvas.drawOval(re21, paint); Path path3 = new Path(); path3.moveTo(90, 340); path3.lineTo(150, 340); path3.lineTo(120, 290); path3.close(); //绘制三角形 canvas.drawPath(path3, paint); Path path4 = new Path(); path4.moveTo(106, 360); path4.lineTo(134, 360); path4.lineTo(150, 392); path4.lineTo(120, 420); path4.lineTo(90, 392); path4.close(); //绘制五角形 canvas.drawPath(path4, paint); // ----------设置渐变器后绘制---------- // 为Paint设置渐变器 Shader mShader = new LinearGradient(0, 0, 40, 60 , new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW } , null , Shader.TileMode.REPEAT); paint.setShader(mShader); //设置阴影 paint.setShadowLayer(45 , 10 , 10 , Color.GRAY); // 绘制圆形 canvas.drawCircle(200, 40, 30, paint); // 绘制正方形 canvas.drawRect(170, 80, 230, 140, paint); // 绘制矩形 canvas.drawRect(170, 150, 230, 190, paint); RectF re3 = new RectF(170, 200, 230, 230); // 绘制圆角矩形 canvas.drawRoundRect(re3, 15, 15, paint); RectF re31 = new RectF(170, 240, 230, 270); // 绘制椭圆 canvas.drawOval(re31, paint); Path path5 = new Path(); path5.moveTo(170, 340); path5.lineTo(230, 340); path5.lineTo(200, 290); path5.close(); // 根据Path进行绘制,绘制三角形 canvas.drawPath(path5, paint); Path path6 = new Path(); path6.moveTo(186, 360); path6.lineTo(214, 360); path6.lineTo(230, 392); path6.lineTo(200, 420); path6.lineTo(170, 392); path6.close(); // 根据Path进行绘制,绘制五角形 canvas.drawPath(path6, paint); // ----------设置字符大小后绘制---------- paint.setTextSize(24); paint.setShader(null); // 绘制7个字符串 canvas.drawText(getResources().getString(R.string.circle), 240, 50, paint); canvas.drawText(getResources().getString(R.string.square), 240, 120, paint); canvas.drawText(getResources().getString(R.string.rect), 240, 175, paint); canvas.drawText(getResources().getString(R.string.round_rect), 230, 220, paint); canvas.drawText(getResources().getString(R.string.oval), 240, 260, paint); canvas.drawText(getResources().getString(R.string.triangle), 240, 325, paint); canvas.drawText(getResources().getString(R.string.pentagon), 240, 390, paint); } }
二、动画资源
1、逐帧动画
ImageView imageView = (ImageView)findViewById(R.id.anim); //获取AnimationDrawable动画对象 final AnimationDrawable anim = (AnimationDrawable)imageView .getBackground();
//开始播放动画 anim.start();
<ImageView android:id="@+id/anim" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@anim/fat_po" android:scaleType="center" />
定义动画XML
<?xml version="1.0" encoding="utf-8"?> <!-- 指定动画循环播放 一直播放oneshot=true表示只播放一次--> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <!-- 添加多个帧 播放持续时间--> <item android:drawable="@drawable/fat_po_f25" android:duration="60" /> <item android:drawable="@drawable/fat_po_f26" android:duration="60" /> <item android:drawable="@drawable/fat_po_f27" android:duration="60" /> </animation-list>
//重写该方法,控制如果动画播放到最后一帧时,隐藏该View @Override protected void onDraw(Canvas canvas) { try { //还要通过反射啊。mCurFrame=-1 Field field = AnimationDrawable.class .getDeclaredField("mCurFrame"); field.setAccessible(true); // 获取anim动画的当前帧 int curFrame = field.getInt(anim); // 如果已经到了最后一帧 curFrame=0表示第一帧 if (curFrame == anim.getNumberOfFrames() - 1) { //让该View隐藏 setVisibility(View.INVISIBLE); } } catch (Exception e) { } super.onDraw(canvas); }
2、补间动画
使用步骤
定义开始和结束的关键帧
Interpolator 有几个子类,加速,减速,匀速。
//加载第一份动画资源 final Animation anim = AnimationUtils .loadAnimation(this, R.anim.anim); //设置动画结束后保留结束状态 anim.setFillAfter(true);
运行动画flower.startAnimation(anim );
自定义补间动画
/* * 该方法的interpolatedTime代表了抽象的动画持续时间,不管动画实际持续时间多长, * interpolatedTime参数总是从0(动画开始时)~1(动画结束时) * Transformation参数代表了对目标组件所做的变. */ @Override protected void applyTransformation(float interpolatedTime, Transformation t) { camera.save(); //根据interpolatedTime时间来控制X、Y、Z上的偏移 camera.translate(100.0f - 100.0f * interpolatedTime , 150.0f * interpolatedTime - 150 , 80.0f - 80.0f * interpolatedTime); // 设置根据interpolatedTime时间在Y柚上旋转不同角度。 camera.rotateY(360 * (interpolatedTime)); // 设置根据interpolatedTime时间在X柚上旋转不同角度 camera.rotateX((360 * interpolatedTime)); //获取Transformation参数的Matrix对象 Matrix matrix = t.getMatrix(); camera.getMatrix(matrix); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); camera.restore(); }
Paint类常用方法:
void setARGB(int a, int r, int g, int b) 设置Paint对象颜色,参数一为alpha透明通道
void setAlpha(int a) 设置alpha不透明度,范围为0~255
void setAntiAlias(boolean aa) //是否抗锯齿
void setColor(int color) //设置颜色,这里Android内部定义的有Color类包含了一些常见颜色定义
void setFakeBoldText(boolean fakeBoldText) //设置伪粗体文本
void setLinearText(boolean linearText) //设置线性文本
PathEffect setPathEffect(PathEffect effect) //设置路径效果
Rasterizer setRasterizer(Rasterizer rasterizer) //设置光栅化
Shader setShader(Shader shader) //设置阴影
void setTextAlign(Paint.Align align) //设置文本对齐
void setTextScaleX(float scaleX) //设置文本缩放倍数,1.0f为原始
void setTextSize(float textSize) //设置字体大小
Typeface setTypeface(Typeface typeface) //设置字体,Typeface包含了字体的类型,粗细,还有倾斜、颜色等。
void setUnderlineText(boolean underlineText) //设置下划线
相关推荐
本文将详细介绍如何利用VB的图形处理功能,通过图形控件实现独特的功能,比如动态展示图片、与数据库联动实现导航效果等。 #### 二、VB图形控件的另类应用 ##### 2.1 滚动的图形风光介绍 这一部分主要利用了VB中...
在Android平台上,图形与图像处理是一项关键技能,它涉及到用户界面设计、游戏开发、相机应用以及其他涉及视觉元素的移动应用程序。本主题主要涵盖Android系统如何处理图形和图像,包括基本概念、API使用以及实例...
图形批处理工具,它可以将若干图片一次进行大小处理和剪裁直接图形批处理工具,它可以将若干图片一次进行大小处理和剪裁直接图形批处理工具,它可以将若干图片一次进行大小处理和剪裁直接图形批处理工具,它可以将...
本教程重点围绕“Visual C#图形图像编程(处理图片)”展开,我们将探讨C#如何用于创建和操作图像。 C#中的图形图像处理主要通过System.Drawing命名空间进行,这个命名空间包含了用于绘制图形、处理图像和控制输出...
本资源“图形图像处理经典图片素材”是一份专为Matlab仿真设计的素材集合,旨在为从事图像处理研究和实践的用户提供丰富的实验数据和参考示例。 Matlab是一款强大的数学计算软件,同时它也提供了丰富的图像处理工具...
java图形图象处理(系统+医学图片).zipjava图形图象处理(系统+医学图片).zipjava图形图象处理(系统+医学图片).zipjava图形图象处理(系统+医学图片).zipjava图形图象处理(系统+医学图片).zipjava图形图象...
在VB(Visual Basic)编程环境中,图形图像处理是一项重要的技能,尤其对于开发用户界面友好、视觉效果丰富的应用程序来说。本书“vb图形图像处理开发及实例”深入浅出地介绍了如何利用VB进行图形图像的创建、编辑和...
通过修改这个代码,用户可以更换不同的图片,观察不同纹理对图形视觉效果的影响,从而更好地理解和掌握纹理处理的技术。 总的来说,真实感图形绘制中的纹理处理是一个涉及多个层次和复杂技术的领域。从基本的纹理...
本资源聚焦于利用C#进行图形图像处理,这是一个关键的技能,尤其是在创建交互式用户界面、游戏开发和数据可视化等场景。下面将详细探讨C#中涉及的图形图像处理相关知识点。 1. **GDI+(Graphics Device Interface ...
标题与描述中的“中科大10年高级图形图像处理试卷”这一知识点,指向的是中国科学技术大学(简称中科大)在过去的十年间所出的高级图形图像处理考试的试卷集。这个知识点涵盖了两个主要方面:一是中科大的教育背景,...
其新功能的应用对于Web图形图像处理具有革命性的意义,让开发者无需在服务器端预先绘制图片,也无需借助第三方插件即可在浏览器中直接进行图形绘制和处理。这种结合了云计算、WebService等技术的发展趋势,预示着...
1. **图像加载与保存**:支持多种图像格式(如BMP、JPEG、PNG、GIF等)的读取和写入,使开发者能够轻松地在应用程序中处理不同来源的图片。 2. **图像滤镜**:提供了一系列的图像滤镜效果,例如模糊、锐化、色彩...
在图像处理领域,"扫描图片统计图形个数"是一个常见的任务,主要涉及到图像分析和模式识别。这个任务的核心是找出图像中的各个独立图形,并计数。在这个过程中,四连通是一种常用的连接概念,用于判断图像中相邻像素...
本书采用面向对象的方法介绍数字图像和图形处理的实用编程技术,共分两部分。第一部分以实用图像处理程序设计为主题,内容包括基本的图像空域处理方法、合成技术、几何变换技术、形态学操作、光栅操作、切换特技等。...
本资源“图形处理源码”显然提供了一些用于处理图形的原始代码,这对于学习和理解图形处理算法以及开发相关应用程序非常有帮助。让我们深入探讨一下这个主题。 首先,图形处理通常涉及到图像的获取、分析、编辑和...
在C#编程语言中,图形处理是一门重要的技术,它涉及到图像的创建、修改、分析以及显示等操作。本资源库包含的"C# 图形处理大全源码(共60多种算法)"提供了丰富的示例代码,可以帮助开发者深入理解并实践图形处理的...
在IT领域,图形图像处理是一项重要的技术,广泛应用于多媒体、设计、计算机视觉和人工智能等多个方面。这个名为"图形图像处理小工具"的应用程序,显然专为处理和生成图形学相关图像而设计。它具备多种功能,包括二值...
综上所述,使用DevExpress 16.2的GridControl实现“Dev GridControl 图片列表及图形化展示切换”涉及的关键技术点包括GridControl的视图模式切换、图片缩略图的处理与显示、图形化界面设计以及用户交互。这个功能...