`
齐在
  • 浏览: 11779 次
社区版块
存档分类
最新评论

安卓画板

 
阅读更多

安卓的话,目前也是刚刚入门,做了一个简单的画图板。画图板有两种写法,第一种是用imageView来实现画板,但是有一个弊端就是画图的位置有偏移,第二种是自定义一个组件,有点会是位置准确。在学JAVA的时候,我们也做过画图板,安卓的开发并没有多大区别。当然,我们首先要提到的是Bitmap,Canvas,Paint这三个类。
Bitmap:我们可以把它看作是一个画布
Canvas:相当于就是铅笔
Paint :铅笔头
从它们的关系可以看出,我们想要画出一个图案,在这个过程中,画笔用于决定图案的颜色,然后再在画布上画出来,但仅仅是画出来还不够,我们需要一块屏幕来把图案展现出来
下面重点来介绍一下自定义组件的方法:
1、我们首先需要做的是定义一个自定义组件DrawView,让它继承自View,然后让它来实现View的public DrawView(Context context) { };public DrawView(Context context, AttributeSet attrs) {};public DrawView(Context context, AttributeSet attrs, int defStyle) { }这三个构造方法,最后加到布局上去
2、重写onDraw方法,实例化bitmap和canvas
3、在string.xml中可以添加上需要用到的string
4、添加目录,在menu.xml中可以很简便的实现
3、实现onTouchEvent方法,当做出不同动作时会触发不同的反应

package com.exam.fidraw;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {
	public DrawView dv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		dv = (DrawView) this.findViewById(R.id.drawView1);
		dv.paint.setColor(Color.GREEN);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// super.onMenuItemSelected(featureId, item);
		int id = item.getItemId();
		System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<");
		switch (id) {
		case R.id.color_red:
			dv.paint.setColor(Color.RED);

			System.out.println("<<<<<<<<REDREDREDRED<<<<<<<<<<<<<");
			break;
		case R.id.color_green:
			dv.paint.setColor(Color.GREEN);
			break;
		case R.id.color_blue:
			dv.paint.setColor(Color.BLUE);
			break;
		case R.id.width_1:
			dv.paint.setStrokeWidth(1);
			break;
		case R.id.width_3:
			dv.paint.setStrokeWidth(3);
			break;
		case R.id.width_5:
			dv.paint.setStrokeWidth(5);
			break;
		case R.id.width_7:
			dv.paint.setStrokeWidth(7);
			break;
		case R.id.shape_line:
			dv.shape = "直线";
			break;
		case R.id.shape_oval:
			dv.shape = "椭圆";
			break;
		case R.id.shape_rect:
			dv.shape = "矩形";
			break;
		case R.id.shape_pencil:
			dv.shape = "铅笔";
			break;
		}
		System.out.println("<<<<<<<<<<switchswitch<<<<<<<<<<<<<<");
		return super.onMenuItemSelected(featureId, item);
	}
}

 

package com.exam.fidraw;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Bitmap.Config;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class DrawView extends View {
	private Bitmap bitmap;
	private Canvas canvas;
	public Paint paint;
	public String shape = "直线";
	private float x1, x2, y1, y2;

	public DrawView(Context context) {
		super(context);
	}

	public DrawView(Context context, AttributeSet attrs) {
		super(context, attrs);
		paint = new Paint();
	}

	public DrawView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public void onDraw(Canvas canvas) {
		super.onDraw(canvas);

		canvas.drawColor(Color.BLUE);
		// 判断bitmap是否为null
		if (bitmap == null) {
			bitmap = Bitmap.createBitmap(this.getWidth(), this.getHeight(),
					Config.ARGB_8888);
			this.canvas = new Canvas(bitmap);
		}
		// 把图形画在屏幕上
		canvas.drawBitmap(bitmap, 0, 0, paint);
	}

	public boolean onTouchEvent(MotionEvent event) {

		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			x1 = event.getX();
			y1 = event.getY();
			break;
		case MotionEvent.ACTION_UP:
			x2 = event.getX();
			y2 = event.getY();
			if (shape.equals("直线")) {
				canvas.drawLine(x1, y1, x2, y2, paint);
			} else if (shape.equals("椭圆")) {
				canvas.drawOval(new RectF(x1, y1, x2, y2), paint);
			} else if (shape.equals("矩形")) {
				canvas.drawRect(Math.min(x1, x2), Math.min(y1, y2),
						Math.max(x1, x2), Math.max(y1, y2), paint);
			}
			break;
		case MotionEvent.ACTION_MOVE:
			x2 = event.getX();
			y2 = event.getY();
			if (shape.equals("铅笔")) {
				canvas.drawLine(x1, y1, x2, y2, paint);
				x1 = x2;
				y1 = y2;
			}
			break;
		}
		this.invalidate();
		return true;
	}
}

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <com.exam.fidraw.DrawView
        android:id="@+id/drawView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

</RelativeLayout>

 

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">FiDraw</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="color">颜色</string>
    <string name="color_red">红色</string>
    <string name="color_green">绿色</string>
    <string name="color_blue">蓝色</string>
    <string name="shape">形状</string>
    <string name="shape_line">直线</string>
    <string name="shape_pencil">铅笔</string>
    <string name="shape_rect">矩形</string>
    <string name="shape_oval">椭圆</string>
    <string name="width">宽度</string>
    <string name="width_1">加细</string>
    <string name="width_3">细</string>
    <string name="width_5">粗</string>
    <string name="width_7">加粗</string>

</resources>

 

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/color"
        android:enabled="true"
        android:title="@string/color">
        <menu>
            <group
                android:checkableBehavior="single"
                android:enabled="true"
                android:visible="true" >
                <item
                    android:id="@+id/color_red"
                    android:title="@string/color_red"/>
                <item
                    android:id="@+id/color_green"
                    android:title="@string/color_green"/>
                <item
                    android:id="@+id/color_blue"
                    android:title="@string/color_blue"/>
            </group>
        </menu>
    </item>
    <item
        android:id="@+id/width"
        android:title="@string/width">
        <menu>
            <group
                android:checkableBehavior="single"
                android:enabled="true" >
                <item
                    android:id="@+id/width_1"
                    android:title="@string/width_1"/>
                <item
                    android:id="@+id/width_3"
                    android:title="@string/width_3"/>
                <item
                    android:id="@+id/width_5"
                    android:title="@string/width_5"/>
                <item
                    android:id="@+id/width_7"
                    android:title="@string/width_7"/>
            </group>
        </menu>
    </item>
    <item
        android:id="@+id/shape"
        android:title="@string/shape">
        <menu>
            <group
                android:checkableBehavior="single"
                android:enabled="true" >
                <item
                    android:id="@+id/shape_line"
                    android:title="@string/shape_line"/>
                <item
                    android:id="@+id/shape_pencil"
                    android:title="@string/shape_pencil"/>
                <item
                    android:id="@+id/shape_oval"
                    android:title="@string/shape_oval"/>
                <item
                    android:id="@+id/shape_rect"
                    android:title="@string/shape_rect"/>
            </group>
        </menu>
    </item>
 </menu>

 

 

0
0
分享到:
评论

相关推荐

    完整的安卓画板源代码 Android小画板

    "完整的安卓画板源代码 Android小画板" 提供的源代码是一个实例,它实现了画板应用的基础功能,使得开发者可以深入理解并学习如何在Android环境中创建一个交互式的绘图工具。下面将详细阐述涉及的知识点。 1. **...

    Android 画板(白板)源码 涂鸦 画图 图画

    在Android平台上,开发一款画板应用,也称为白板或涂鸦应用,是常见的需求,尤其对于教育、设计和娱乐领域。本项目"Android 画板(白板)源码 涂鸦 画图 图画"提供了一个完整的实现,让用户能够自由地进行绘图操作。...

    Android画板

    "Android画板"这个项目就是一个这样的示例,它展示了如何在Android环境中实现这些功能。下面我们将深入探讨这个Demo所涉及的关键知识点。 1. **Android Canvas**: Android的Canvas类是绘制2D图形的核心工具。开发者...

    android 画板,白板,画图

    在Android开发中,创建一个互动的画板应用是一项有趣且实用的任务。这个“android 画板,白板,画图”模块提供了一种简单的方法,让用户可以在屏幕上进行涂鸦、绘图、添加文字以及处理图像,非常适合用于教育、设计...

    安卓画板【eclipse】

    安卓画板是基于Android操作系统的一种应用,用户可以在其上进行自由绘画,实现涂鸦、绘图等操作,通常具备选择颜色、画笔粗细、橡皮擦等功能。这种应用通常会利用Android SDK提供的Canvas和Paint类来绘制图形,以及...

    Android-Android画板控件可以写字画画并生成图片

    首先,`Android画板控件`(Painting View)是一种自定义视图,开发者可以通过它来构建用户交互的绘图界面。这个控件允许用户通过手指触摸屏幕进行绘制,可以用于创建涂鸦应用、笔记应用或者儿童教育应用等。为了实现...

    android 画板 涂鸦

    在这个项目中,我们将探讨Android画板的基本原理、核心功能以及如何实现涂鸦效果。 1. **Android画布(Canvas)和画笔(Paint)** Android的`Canvas`类是进行图形绘制的基础,它提供了绘制线条、形状、文本等图形的...

    安卓画板模板

    本文将基于"安卓画板模板"这一主题,探讨如何在Android环境中创建一个能够实现画东西显示功能的画板应用。 首先,我们关注的核心组件是`DrawingView`,这是在Android中实现画板功能的关键类。`DrawingView`继承自`...

    android 画板

    总的来说,这个"android画板"项目是一个很好的学习资源,它涵盖了Android开发中的关键概念,如自定义View、图形绘制、触摸事件处理和数据存储。对于想要提升Android图形编程能力的开发者来说,深入研究这个项目会有...

    Android画板 涂鸦板

    总之,开发Android画板或涂鸦板应用需要掌握自定义View、图形绘制、颜色选择、笔形和粗细设置、相机集成、橡皮擦功能、绘图历史管理和保存分享等多个方面。通过这些技术,我们可以构建出一款功能丰富的创意工具,...

Global site tag (gtag.js) - Google Analytics