安卓的话,目前也是刚刚入门,做了一个简单的画图板。画图板有两种写法,第一种是用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>
相关推荐
"完整的安卓画板源代码 Android小画板" 提供的源代码是一个实例,它实现了画板应用的基础功能,使得开发者可以深入理解并学习如何在Android环境中创建一个交互式的绘图工具。下面将详细阐述涉及的知识点。 1. **...
在Android平台上,开发一款画板应用,也称为白板或涂鸦应用,是常见的需求,尤其对于教育、设计和娱乐领域。本项目"Android 画板(白板)源码 涂鸦 画图 图画"提供了一个完整的实现,让用户能够自由地进行绘图操作。...
"Android画板"这个项目就是一个这样的示例,它展示了如何在Android环境中实现这些功能。下面我们将深入探讨这个Demo所涉及的关键知识点。 1. **Android Canvas**: Android的Canvas类是绘制2D图形的核心工具。开发者...
在Android开发中,创建一个互动的画板应用是一项有趣且实用的任务。这个“android 画板,白板,画图”模块提供了一种简单的方法,让用户可以在屏幕上进行涂鸦、绘图、添加文字以及处理图像,非常适合用于教育、设计...
安卓画板是基于Android操作系统的一种应用,用户可以在其上进行自由绘画,实现涂鸦、绘图等操作,通常具备选择颜色、画笔粗细、橡皮擦等功能。这种应用通常会利用Android SDK提供的Canvas和Paint类来绘制图形,以及...
首先,`Android画板控件`(Painting View)是一种自定义视图,开发者可以通过它来构建用户交互的绘图界面。这个控件允许用户通过手指触摸屏幕进行绘制,可以用于创建涂鸦应用、笔记应用或者儿童教育应用等。为了实现...
在这个项目中,我们将探讨Android画板的基本原理、核心功能以及如何实现涂鸦效果。 1. **Android画布(Canvas)和画笔(Paint)** Android的`Canvas`类是进行图形绘制的基础,它提供了绘制线条、形状、文本等图形的...
本文将基于"安卓画板模板"这一主题,探讨如何在Android环境中创建一个能够实现画东西显示功能的画板应用。 首先,我们关注的核心组件是`DrawingView`,这是在Android中实现画板功能的关键类。`DrawingView`继承自`...
总的来说,这个"android画板"项目是一个很好的学习资源,它涵盖了Android开发中的关键概念,如自定义View、图形绘制、触摸事件处理和数据存储。对于想要提升Android图形编程能力的开发者来说,深入研究这个项目会有...
总之,开发Android画板或涂鸦板应用需要掌握自定义View、图形绘制、颜色选择、笔形和粗细设置、相机集成、橡皮擦功能、绘图历史管理和保存分享等多个方面。通过这些技术,我们可以构建出一款功能丰富的创意工具,...