Canvas绘制以及使用第三方字体(多媒体学习基础)

通过使用Canvas进行园,矩形,椭圆,直线,在路径上绘制文本,使用第三方字体,根据手指一动绘制图形,TypeFace的使用等等,

推荐看看这个《Androidd多媒体开发教程pdf
》:下载地址:http://download.csdn.net/detail/u012808234/9470480

代码:

package com.example.chenpengfei_d.canvasdemo;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnTouchListener{
    private ImageView mIv_ImageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private Canvas canvas;
    private Paint paint;
    private void init() {
        mIv_ImageView = (ImageView)findViewById(R.id.iv_imageView);
        int width = getWindowManager().getDefaultDisplay().getWidth();
        int height = getWindowManager().getDefaultDisplay().getHeight();
        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        canvas = new Canvas(bitmap);

        paint = new Paint();
        paint.setColor(Color.BLUE);
//        paint.setStyle(Paint.Style.STROKE);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(3);

        RectF rectF = new RectF(10,20,200,100);
        canvas.drawRect(rectF, paint);

        RectF rectOval = new RectF(200,20,400,100);
        canvas.drawOval(rectOval, paint);

        canvas.drawCircle(550, 140, 120, paint);

        Path path = new Path();
        path.moveTo(20, 200);//没有moveTod 话就会直接从0,0点开始绘制
        path.lineTo(200, 200);
        path.lineTo(150, 260);
        path.lineTo(100, 220);
        path.lineTo(70, 260);
        path.lineTo(70, 260);
        path.lineTo(20, 200);
        canvas.drawPath(path, paint);

        paint.setTextSize(36);
        paint.setTypeface(Typeface.SANS_SERIF);
        canvas.drawText("你好,我在画图", 200, 200, paint);

        paint.setTypeface(Typeface.DEFAULT_BOLD);
        canvas.drawText("你好,我在画图", 200, 240, paint);

        paint.setTypeface(Typeface.MONOSPACE);
        canvas.drawText("你好,我在画图", 200, 280, paint);

        Typeface typeface = Typeface.create(Typeface.SERIF, Typeface.ITALIC);
        paint.setTypeface(typeface);
        canvas.drawText("你好,我在画图", 200, 320, paint);
//        加载第三方字体
        Typeface typeface1 = Typeface.createFromAsset(getAssets(),"typeface.TTF");
        paint.setTypeface(typeface1);
        paint.setTextSize(48);
        Path textPath = new Path();
        textPath.moveTo(20,400);
        textPath.lineTo(40, 440);
        textPath.lineTo(80, 480);
        textPath.lineTo(120, 540);
        textPath.lineTo(180, 600);
        textPath.lineTo(190,600);
        textPath.lineTo(330,600);
        canvas.drawTextOnPath("where are you from ?", textPath, 0, 0, paint);

        paint.setColor(Color.RED);
        canvas.drawText("使用第三方字体", 200, 400, paint);
        mIv_ImageView.setImageBitmap(bitmap);
        mIv_ImageView.setOnTouchListener(this);
    }

    private float startX = 0 ;
    private float startY = 0 ;
    private float endX = 0 ;
    private float endY = 0 ;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        switch (action){
            case MotionEvent.ACTION_DOWN:
                startX = event.getX();
                startY = event.getY();
                break;
            case MotionEvent.ACTION_UP:

                break;
            case MotionEvent.ACTION_MOVE:
             /*
                绘制起点到移动点的直线
                endX = event.getX() ;
                endY = event.getY();
                canvas.drawLine(startX,startY,endX,endY,paint);
                mIv_ImageView.invalidate();*/

                endX = event.getX();
                endY = event.getY();
                canvas.drawLine(startX,startY,endX,endY,paint);
                startX = endX; startY = endY;
                mIv_ImageView.invalidate();
                break;
        }
        return true;
    }
}

对于第三方字体的使用,需要下载.ttf的字体文件,放到assets文件夹中,然后通过

  加载第三方字体
        Typeface typeface1 = Typeface.createFromAsset(getAssets(),"typeface.TTF");
这个文件网上有很多,直接搜索下载就好了。


时间: 2025-01-23 19:52:49

Canvas绘制以及使用第三方字体(多媒体学习基础)的相关文章

js+html5实现canvas绘制镂空字体文本的方法

  本文实例讲述了js+html5实现canvas绘制镂空字体文本的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3

js+html5实现canvas绘制镂空字体文本的方法_javascript技巧

本文实例讲述了js+html5实现canvas绘制镂空字体文本的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"> Your browser does not s

jQuery插件Flot学习Canvas绘制图形的原理

Flot采用Canvas绘制图形(Web总共就有三种常见方式来绘制图形,不了解的同学请看这篇文章),在数据量非常大的时候,你需要考虑浏览器端的性能问题.顺便提一句,D3是采用SVG来绘制图形的,从我自己的体会来说,对于拖动图来说,SVG会比较流畅. 首先介绍一下数据的格式.数据来自一个数组嵌套的JSON格式,如:  代码如下 复制代码 [[0, 3], [4, 8], [8, 5], [9, 13]] 这就给定了一个二维图上供绘制连线的几个点. 数据可以直接通过API传给Flot,让它自行决定数

《Python语言程序设计》——3.8 绘制带颜色和字体的图形

3.8 绘制带颜色和字体的图形 关键点:turtle对象包含设置颜色和字体的方法. 前一节介绍了如何用Turtle模块绘制图形.通过学习掌握如何使用运动方法移动笔以及用笔的方法将笔抬高.降低和控制笔的粗细.本节将介绍更多有关笔的控制方法,如何设置颜色和字体以及编写文本. 表3-7罗列出控制绘图.颜色和填充的笔的方法.程序清单3-6是一个用不同颜色绘制三角形.正方形.五边形.六边形和圆的简单程序,如图3-4所示.程序也为图形添加了 文本. 程序清单3-6 ColorShapes.py 除了给每个图

HTML5 canvas绘制雪花飘落动画(需求分析、知识点、程序编写分布详解)

原文:HTML5 canvas绘制雪花飘落动画(需求分析.知识点.程序编写分布详解) 看到网上很多展示html5雪花飞动的效果,确实非常引人入胜,我相信大家也跟我一样看着心动的同时,也很好奇,想研究下代码如何实现:虽然哦很多地方也能下载这些源码,不过也不知道别人制作此类动画时的思路及难点分析. 我这几天刚好学习了一下,也趁着此刻有时间从需求分析.知识点.程序编写一步步给大家解剖下,要是在各位关公面前耍大刀了,可别见笑哟. 最终效果图如下: 图1 一.需求分析 1.圆形雪花 本示例中雪花形状使用圆

Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)_Android

本文实例讲述了Android编程之canvas绘制各种图形的方法.分享给大家供大家参考,具体如下: 1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into

JavaScript实现使用Canvas绘制图形的基本教程_javascript技巧

由于这两年HTML5火的正热,所以研究了一下,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把. 好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是几个实例,记下以备后用. 1.使用Canvas绘制直线: <!doctype html> <html> <head> <meta charset="UTF-8"> </head> <style ty

JavaScript html5 canvas绘制时钟效果(二)_javascript技巧

 对于H5来说,canvas可以说是它最有特色的一个地方了,有了它之后我们可以随意的在网页上画各种各样的图形,做一些小游戏啊什么的.canvas这个标签的用法,在网上也有特别多的教程了,这里就不作介绍了.今天我们就用canvas来做一个小小的时钟.完整的代码在这里https://github.com/wwervin72/HTML5-Clock. 那么首先在这个页面里面我使用了两个canvas,一个用来绘制静态的时钟表盘和刻度,另一个用来绘制时钟的三个指针,然后用定位让他们重合到一起.然后这里没什

JS+Canvas绘制时钟效果_javascript技巧

本文实例为大家分享了使用canvas绘制时钟的具体代码,供大家参考,具体内容如下 1. clock.html    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Description" content=""> <title>canvas时钟</t