2012-07-26 18:16:05 wwj_748 阅读数 1679

Android图形与图像处理-补间动画

创建项目:TweenAnim

项目运行效果:

  

 

项目代码:

动画资源文件:两个动画资源文件

anim.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 指定动画匀速改变 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator">
    <!-- 定义缩放变换 -->
    <scale android:fromXScale="1.0"
        android:toXScale="0.01"
        android:fromYScale="1.0"
        android:toYScale="0.01"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="true"
        android:duration="3000"/>
    <!-- 定义透明度的变换 -->
    <alpha 
        android:fromAlpha="1"
        android:toAlpha="0.05"
        android:duration="3000"
        />
    <!-- 定义旋转变换 -->
    <rotate 
        android:fromDegrees="0"
        android:toDegrees="1800"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="3000"/>
</set>


reverse.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 指定动画匀速改变 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:startOffset="3000">
    <!-- 定义缩放变换 -->
    <scale android:fromXScale="0.01"
        android:toXScale="1"
        android:fromYScale="0.01"
        android:toYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="true"
        android:duration="3000"
        />
    <!-- 定义透明度的变换 -->
    <alpha 
        android:fromAlpha="0.05"
        android:toAlpha="1"
        android:duration="3000"
        />
    <!-- 定义旋转变换 -->
    <rotate 
        android:fromDegrees="1800"
        android:toDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="3000"
        />
</set>


布局文件:main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal" >
    <Button 
        android:id="@+id/bn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="播放动画"
        />
    <ImageView
        android:id="@+id/flower"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/flower"
        />

</LinearLayout>


TweenAnim.java

package wwj.tweenanim;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;

public class TweenAnim extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final ImageView flower = (ImageView)findViewById(R.id.flower);
        //加载第一份动画资源
        final Animation anim = AnimationUtils.loadAnimation(this, R.anim.anim);
        //设置动画结束后保留结束状态
        anim.setFillAfter(true);
        //加载第二份动画资源
        final Animation reverse = AnimationUtils.loadAnimation(this, R.anim.reverse);
        //设置动画结束后保留结束状态
        reverse.setFillAfter(true);
        Button bn = (Button)findViewById(R.id.bn);
        final Handler handler = new Handler(){
        	public void handleMessage(android.os.Message msg) {
        		if(msg.what == 0x123){
        			flower.startAnimation(reverse);
        		}
        	};
        };
        
        bn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				flower.startAnimation(anim);
				//设置3。5秒后启动第二个动画
				new Timer().schedule(new TimerTask() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
						handler.sendEmptyMessage(0x123);
					}
				}, 3500);
			}
		});
    }

}


 

2011-01-19 11:01:00 chief_fu 阅读数 1063

首先申明,我并不精通 Java 的图形图像处理 API 。因为整这个验证码,接触了一些,发现原来 JDK 提供了非常强大的图形图像处理能力。在网上找了点资料,现摘取其中的一些介绍放这,然后你可以下载整个文档( Java_2D_API_中文使用指.pdf )。

 

Java 2D API 增强了抽象窗口工具包( AWT )的图形、文本和图像功能,可以开发更为强大的用户接口和新型的 Java 应用程序。

除了更加强大的图形、文本和图像 API 外, Java 2D API 还改进了颜色的定义与复合及对任意几何形状和文本的选中检测,并为打印机和显示设备提供了统一的绘制模式。

Java 2D API 还可以创建高级图形库(例如 CAD-CAM 库和图形图像特殊效果库),并可创建图像和图形文件读 / 写过滤器。

当与 Java 媒体框架( JMF )和其它 Java 媒体应用程序配合使用时, Java 2D API 还可用来创建和显示动画和其它多媒体演示稿。 Java 动画和 Java 媒体框架 API 依赖 Java 2D API 提供支持。

Java 2D API AWT 进行了扩展,提供了更加灵活、功能更全面的绘制包,使其支持更多的一般图形和绘制操作。

例如,用户通过 Graphics 类可以画矩形、椭圆和多边形。 Graphics2D 还提供了一种可绘制任意几何形状的机制,从而增强了几何绘制功能。类似地,利用 Java 2D API 还可以绘制任意宽度的线条,并可用任意文理填充几何形状。

几何形状是通过 Shape 接口的实现提供的(例如 Rectangle2D Ellipse2D )。曲线和弧也是 Shape 的特定实现。

填充和画笔样式由 Paint Stroke 接口的实现提供(例如 BasicStroke GradientPaint TexturePaint Color )。

AffineTransfor 定义二维坐标的线性转换,包括缩放、平移、旋转和修剪。

剪切区域有用来定义一般剪切区域的 Shape 接口的同一实现来定义(例如 Rectangle2D GeneralPath )。

颜色复合由 Composite 接口的实现提供(例如 AlphaComposite )。

Font Glyphs 集定义,而 Glyphs 集由单个 Shape 定义。

 

 


2015-03-23 17:18:57 lk142500 阅读数 1146
计算机图形学与图像处理图形学的研究内容
 
 计算机图形学的定义:指用计算机产生对象图形的输出的技术。更确切的说,计算机图形学是研究通过见算计将数据转化为图形,并在专门显示设备上显示的原理。方法和技术的科学。
 IEEE定义:Computer Graphics is the art or science of producing graphical images with the aid of computer.
 首相,我们需要弄清楚几个概念:
   
   模型:能够正确的表达出一个对象性质,结构和行为的描述信息。
   图形处理:指的是用计算机来改善图像质量的数字技术。
   模式识别是指的是用计算机对输入设备进行识别的技术。
   计算机和雪是研究几何模型和数据处理的学科。
   交互式计算机是指用计算机交互式的产生图形的技术。
   交互任务是用户输入到计算机中的一个单元信息,基本任务有四种:定位,字串,选择和取数。
 一个图形问题的概括性描述叫做模型,它能被计算机所懂得并转换成相应的图形在现实屏幕或绘图机上输出。在三维空间,描述的是几何形体和几何曲面。
 只有在平面上,才是人们通常所称的图形。
 
 图形系统的硬件
  计算机,显示处理器(DPU),图形显示器,输入设备和硬拷贝设备。
  CRT图形显示器工作的方式主要有两种:随机扫描方式和光栅扫描方式。
  
 分辨率:显示屏上显示的像素的总数。常用每行的像素数乘以每列的像素数的乘积来表示。
 亮度等级或称灰度等级数目是指单色显示器像素的亮度可以有多少种不同的变化。
 颜色系统:RGB,CMY(青,品红,黄)HSV(色彩,饱和度,亮度)
 
 计算机图形标准:
  CGI(Computer Graphics Interface)
  CGM(Computer Graphics Metafile)
  GKS(Graphics Kernal System)
  PHIGS(Programmer's Hierarchical Interactive Graphics System)
  GL(Graphics Library)
   其具有如下功能:基本图素(线,多边形)坐标变换、设置属性和显示方式、输入输出处理、真实图像显示。


  
2019-05-31 23:16:42 weixin_43915481 阅读数 54

Android图形图像处理

市面上大多数的Android程序都会用到图形图像处理技术,例如绘制图形,为图片添加特效等。在绘制图像时最常用的就是Bitmap类、BitmapFactory类、Paint类、Canvas类和Matrix类。其中,Bitmap类代表位图,BitmapFactory类顾名思义就是位图工厂,它是一个工具类,Paint类代表画笔,Canvas类代表画布,为图片添加特效使用的是Matrix类。本文将针对图形处理的API进行讲解。

Bitmap类

Bitmao类是Android系统中非常重要的图像处理类,它提供了一系列的方法,可对图像进行旋转、缩放等操作,并可以指定格式保存图像文件。Bitmap类提供的常用方法如下所示:

方法 描述
drawArc (RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint) 绘制弧形
drawBitmap (Bitmap bitmap, float left, float top, Paint paint) 绘制位图
drawCircle (float cx, float cy, float radius, Paint paint) 绘制圆形
drawLine (float startX, float startY, float stopX, float stopY, Paint paint) 绘制一条线
drawPoint (float x, float y, Paint paint) 绘制一个点
drawRect (float left, float top, float right, float bottom, Paint paint) 绘制矩形
@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

            Paint paint = new Paint();
            super.onDraw(canvas);
            paint.setColor(Color.RED);
            paint.setStrokeWidth(5);
            paint.setStyle(Paint.Style.FILL);

            //绘制路径
            Path path = new Path();
            path.addArc(200, 200, 400, 400, -225, 225);
            path.arcTo(400, 200, 600, 400, -180, 225, false);
            path.lineTo(400, 542);
            //路径剪裁
            canvas.clipPath(path);
            canvas.drawRect(0, 0, 800, 800, paint);
    }

convas

Paint类常用方法

Paint类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填充效果等信息。使用Paint类时,首先要创建它的实例对象,然后通过该类提供的方法来更改Paint对象的默认设置。Paint类提供的常用方法如下:

方法 描述
setAlpha(int a) 设置透明度
setARGB(int a, int r, int g, int b) 绘制颜色
setColor(int color) 设置颜色
setShader(Shader shader) 设置渲染效果
setShadowLayer(float radius, float dx, float dy, int color) 设置阴影
setStrokeWidth(float width) 设置画笔粗细
 protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 把整张画布绘制成白色
        canvas.drawColor(Color.WHITE);
        Paint paint = new Paint();

        /**
         * 设置画笔的锯齿效果,去锯齿
         * 设置画笔颜色,蓝色
         * 设置画笔风格,空心
         * 设置空心画笔的宽度,3
         */
        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("circle", 240, 50,paint);
        canvas.drawText("square", 240, 120,paint);
        canvas.drawText("rect", 240, 175,paint);
        canvas.drawText("RoundRect", 230, 220, paint);
        canvas.drawText("Oval", 240,260, paint);
        canvas.drawText("triangle", 240, 325,paint);
        canvas.drawText("pentagon", 240, 390,paint);


    }

paint

Matrix类

Android提供了Matrix类,使用该类提供的方法,可以对图片添加特别的效果,如旋转、缩放、倾斜等。Matrix类常用的一些方法如下:

方法 描述
setTranslate(float dx,float dy) 控制Matrix进行位移。
setSkew(float kx,float ky) 控制Matrix进行倾斜,kx、ky为X、Y方向上的比例。
setSkew(float kx,float ky,float px,float py) 控制Matrix以px、py为轴心进行倾斜,kx、ky为X、Y方向上的倾斜比例。
setRotate(float degrees) 控制Matrix进行depress角度的旋转,轴心为(0,0)。
setRotate(float degrees,float px,float py) 控制Matrix进行depress角度的旋转,轴心为(px,py)。
setScale(float sx,float sy) 设置Matrix进行缩放,sx、sy为X、Y方向上的缩放比例。
setScale(float sx,float sy,float px,float py) 设置Matrix以(px,py)为轴心进行缩放,sx、sy为X、Y方向上的缩放比例。

作者:黄俊雄
原文链接
https://blog.csdn.net/weixin_43915481/article/details/90724437

没有更多推荐了,返回首页