`
freedomray
  • 浏览: 33532 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个简单的画图程序

阅读更多

    Android里面画图用到的一些相关的东西有:View,Canvas,Paint,Bitmap。

    一,View是画图的目的地,也是直接展现给用户的接口;

    二,Canvas是画笔(与J2ME里的Canvas不一样,跟像J2ME里的Graphics),提供了drawText, drawRect, drawPicture等各种画图方法。既然有“画笔”,就必然还有“画布”。Canvas这个单词本身有画布的意思,但是此处被赋予了“画笔”的作用,那么Android里的“画布”究竟是什么呢?答案是:Bitmap。Bitmap直译是“位图”的意思,在Android中它除了作为图像,还被用作“画布”。因为图像(Image)有Immutable(不可变的)和Mutable(可变的)之分。创建自图形文件的Bitmap是imutable,只给定宽高以及其他一些参数创建的Bitmap则是mutable。画布由于其内容会随着画笔的动作而更改,所以画布都是使用mutable Bitmap。

//Imutalbe bitmap
Bitmap temp = BitmapFactory.decodeFile("/sdcard/zgr.jpg");
Bitmap immutalbe = Bitmap.createBitmap(temp);
		
//Mutable
Bitmap mutalbe = Bitmap.createBitmap(240, 320, Bitmap.Config.RGB_565);

 

    三,Paint可以理解为画笔属性的设置。比如颜色,消除锯齿等等。

    四,Bitmap在前面已经有了一些介绍,关于创建mutable Bitmap所用到的Bitmap.Config里的设定的详细介绍再讨论。

 

以下写了一个例子,功能是在触摸屏幕时在触摸处画点。

package com.cim;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;

public class Test extends Activity {
	MediaPlayer player = null;
	
	OnTouchListener touchListener = new OnTouchListener(){
		public boolean onTouch(View v, MotionEvent e) {
			if(e.getAction() == MotionEvent.ACTION_DOWN){
				player.start();
				System.out.println("OnTouch!!");
			}
			
			return false;
		}
		
	};
	
	private OnClickListener clickListener = new OnClickListener(){

		@Override
		public void onClick(View v) {
			if(player != null)
				player.start();
			
			System.out.println("OnClike!!");
		}
		
	};
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        MyView view = new MyView(this);
        setContentView(view);
        view.requestFocus();
        
        player = MediaPlayer.create(this, R.raw.hello);
//        View button = findViewById(R.id.Button);
//        button.setOnClickListener(clickListener);
//        button.setOnTouchListener(touchListener);
    }
}

class MyView extends View{
	private Paint mPaint;
	
	private Bitmap mBitmap;
	
	private Bitmap srcBitmap;

	public MyView(Context context) {
		super(context);
		
		mPaint = new Paint();
		mPaint.setAntiAlias(true);
		mPaint.setARGB(0, 0xff, 0, 0);
		mBitmap = Bitmap.createBitmap(320, 480, Bitmap.Config.RGB_565);

	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		
		if(mBitmap != null)
			canvas.drawBitmap(mBitmap, 0, 0, null);

	}
	

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		int N = event.getHistorySize();
		float x = 0;
		float y = 0;
		float press = event.getPressure();
		x = /*event.getXPrecision() * */event.getX();
		y = /*event.getYPrecision() * */event.getY();
		System.out.println(">>>VIEW: N = " + N);
		System.out.println(">>>VIEW: X = " + event.getX() + " Y = " + event.getY());
		System.out.println(">>>VIEW: Press = " + event.getPressure() + " Size = " + event.getSize());
		System.out.println(">>>VIEW: XPre = " + event.getXPrecision() + " YPre = " + event.getYPrecision());
		System.out.println(">>>VIEW: X * XPre = " + x 
				+ " Y * YPre = " + y);
		
		for(int i = 0; i < N; i++){
			System.out.println(">>>VIEW: i = " + i 
					+ " Xhis = " + event.getHistoricalX(i)
					+ " Yhis = " + event.getHistoricalY(i));
			System.out.println(">>>VIEW: Pressure: " + event.getHistoricalPressure(i)
					+ " size: " + event.getHistoricalSize(i));
		}
		
		Canvas canvas = new Canvas();
		canvas.setBitmap(mBitmap);
		//mPaint.setARGB((int) (255 * press), 0xff, 0, 0);
		mPaint.setARGB(100, 0xff, 0, 0);
		canvas.drawCircle(x, y, 4, mPaint);
		mPaint.setARGB(255, 0, 0xff, 0);
		canvas.drawCircle(x + 4, y, 4, mPaint);
		mPaint.setARGB(200, 0, 0, 0xff);
		canvas.drawCircle(x, y + 4, 4, mPaint);
		invalidate((int)(x - 4), (int)(y - 4), (int)(x + 8), (int)(y + 8));
		
		return true;
	}
	
	
}

 

需要注意:每次调用触屏事件进行画点动作时,都需要调用invaliddate(rect)方法来出发OnDraw(canvas)函数进行重画。因为OnTouchEvent()函数只是将点画到了mBitmap上,而非与用户交互的View上;要给用户显示实时的效果,必须激发OnDraw()函数才行。

  • 大小: 6.2 KB
分享到:
评论

相关推荐

    一个简单画图程序,画笔话刷的使用

    本项目名为“一个简单画图程序,画笔话刷的使用”,显然是一个利用C++或者MFC(Microsoft Foundation Classes)库来实现的桌面应用程序,允许用户在界面上绘制图形。下面我们将深入探讨其中涉及的关键知识点。 首先...

    mfc简单画图程序

    要创建“mfc简单画图程序”,我们需要关注以下几个关键组件: 1. **CView 类**:这是MFC框架中用于显示和交互的主要类。我们将继承自CView,并重写OnDraw()函数来实现图形的绘制。在这个函数中,我们可以使用CDC...

    vb编写的简单画图程序

    这个"vb编写的简单画图程序"是一个基于VB的图形用户界面(GUI)应用,用于基本的绘图操作。它包含了一系列的模块(Module)和窗体(Form)文件,每个文件都有特定的功能。 1. **Module1.bas**:这是VB中的一个模块...

    java实现简单功能的画图程序源代码

    在Java编程语言中,实现一个简单...以上是基于Java实现一个简单画图程序的主要技术点,每个环节都需要细致的设计和实现。通过这样的程序,用户可以自由地选择形状、颜色,用鼠标进行画图,提高了程序的交互性和趣味性。

    C#一个简单的画图程序

    【标题】:“C#一个简单的画图程序” 这个标题揭示了我们关注的焦点是一个使用C#编程语言构建的简易画图应用程序。C#是Microsoft .NET框架下的主要开发语言,适用于构建各种类型的应用,包括图形用户界面(GUI)...

    C#简单画图程序

    总结来说,“C#简单画图程序”是一个结合了Windows Forms、图形绘制、鼠标事件处理等多个C#核心概念的项目。通过学习和实践这个程序,开发者可以加深对C#编程的理解,提升在图形用户界面开发中的技能。无论是对于...

    C# 简单画图程序

    总结来说,创建C#简单画图程序涉及的主要知识点有: 1. Windows Forms应用程序的创建与设计 2. PictureBox控件的使用 3. 鼠标事件处理:MouseDown、MouseMove、MouseUp 4. Graphics对象的使用,如DrawLine和...

    画图程序(一个简单的画图程序)

    标题中的“画图程序(一个简单的画图程序)”指的是一个基本的图形用户界面应用程序,设计用于绘制和编辑图形。这种程序通常包含各种工具,让用户能够绘制线条、形状、填充颜色,并可能支持图像编辑功能。在开发阶段...

    VC一个简单的画图程序

    在本项目中,我们关注的是一个基于VC++(Visual C++)开发的简单画图程序。这个程序提供了基本的图形绘制功能,用户可以利用它进行简单的图像创作,比如画线、填充颜色等。"VC一个简单的画图程序"标题表明这是一款用...

    基于C#的简单画图程序

    在本项目中,我们探讨的是一个基于C#编程语言实现的简单画图程序。这个程序允许用户在界面上绘制线段、圆形以及矩形,从而为初学者提供了一个直观了解图形用户界面(GUI)编程和C#绘图功能的实例。 C#是微软开发的...

    VC简单的一个画图程序

    在这个“VC简单的一个画图程序”项目中,你显然是在尝试使用Visual C++(VC)开发一个基础的图形用户界面应用,来实现简单的绘图功能。下面将详细解释这个过程涉及的知识点。 首先,你需要了解C++的基础,包括变量...

    MFC简单画图程序

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来创建一个简单的画图程序。MFC 是微软为Windows应用程序开发提供的一套C++类库,它基于面向对象编程,使得开发者能够更容易地利用Windows API...

    制作一个简单画图工具

    【标题】制作一个简单画图工具 在计算机编程领域,创建一个简单的画图工具是一项基础且有趣的任务。这个工具能够帮助用户绘制基本图形,如圆、直线和矩形,并支持2D颜色渐变效果。这样的应用程序通常使用图形用户...

    MFC实现的简单画图程序

    《MFC实现的简单画图程序》 在计算机科学领域,图形用户界面(GUI)的开发是不可或缺的一部分,而Microsoft Foundation Classes(MFC)库为Windows应用程序开发提供了一种高效且方便的方式。本文将深入探讨如何使用...

    VB:简单的画图程序

    以上就是使用VB创建一个简单画图程序的基础知识和实现步骤。通过这种方式,你可以进一步扩展功能,比如添加更多的绘图工具,支持图形的复制、剪切、粘贴,或者实现撤销/重做功能,让画图程序更加实用。

    vc++写的简单画图程序

    在本项目中,"vc++写的简单画图程序"是一个基于Microsoft Visual C++(简称VC++)开发的图形用户界面应用程序,它允许用户进行基本的绘图操作。这个程序利用了MFC(Microsoft Foundation Classes)库,这是一个由...

    简单画图程序(C++)

    【标题】:“简单画图程序(C++)” 在编程领域,C++是一种广泛应用的面向对象的编程语言,尤其在系统软件、应用...如果你对C++编程感兴趣,尤其是对图形编程方面,那么这个“简单画图程序”将是一个很好的学习资源。

    一个用c#写的画图程序

    在本项目中,我们讨论的是一个使用C#编程语言编写的简单画图程序。这个程序旨在模仿Windows操作系统自带的画图工具,为用户提供基础的绘图功能,如绘制直线、曲线、填充颜色等。让我们深入了解一下这个程序可能涉及...

    一个简单的画图程序,可以画线、直线、矩形、多边形、圆、椭圆、并可以这些选中后的图形进行移动,扩大,缩小,删除等操作

    该画图程序是一个基本的图形用户界面应用,旨在提供一种简单的方式来绘制和编辑几何形状。以下是对这个程序涉及的关键知识点的详细说明: 1. **图形用户界面 (GUI) 设计**: GUI 是用户与计算机系统交互的主要方式...

Global site tag (gtag.js) - Google Analytics