画在画布上,并保存图像 [英] Drawing on Canvas and save image
问题描述
我是新来的Android的图形类。我想提请使用触摸事件的图像(实际上是一个签名的那种),并希望它被保存在SD卡,当我要保存它。我已经通过网络对任何此类教程扫描,但我还没有发现任何。谁能告诉我如何借鉴使用触摸事件帆布和保存。
I am new to the Android Graphics class. I want to draw an image(actually a signature kind) using the touch events and want it to be saved on SDcard when I want to save it. I have scanned through the web for any such tutorials but I have not found any. Can anyone please tell me how to draw on canvas using the touch events and save it.
任何教程或样品code将有很大的帮助。
Any tutorials or sample code will be of great help.
推荐答案
图纸的事情
Scribbler.java:
Scribbler.java:
package org.yourpackage.scribble;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
public class Scribbler extends Activity {
DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
drawView.requestFocus();
}
}
DrawView.java:
DrawView.java:
package org.yourpackage.scribble;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class DrawView extends View implements OnTouchListener {
List<Point> points = new ArrayList<Point>();
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
paint.setColor(Color.BLACK);
}
@Override
public void onDraw(Canvas canvas) {
for (Point point : points) {
canvas.drawCircle(point.x, point.y, 2, paint);
}
}
public boolean onTouch(View view, MotionEvent event) {
Point point = new Point();
point.x = event.getX();
point.y = event.getY();
points.add(point);
invalidate();
return true;
}
}
class Point {
float x, y;
}
AndroidManifest.xml中:
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.yourpackage.scribble"
android:versionCode="1"
android:versionName="1.0">
<application>
<activity android:name=".Scribbler">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
..会给你这样的事情:
..will give you something like that:
您可能要画线,而不是像素
You may want to draw lines instead of pixels
保存的事情
要实现节约可以传递位图
到画布
的构造函数,然后使用<一个href="http://developer.android.com/reference/android/graphics/Bitmap.html#com$p$pss%28android.graphics.Bitmap.Com$p$pssFormat,%20int,%20java.io.OutputStream%29">com$p$pss
方法位图
来创建一个的OutputStream
可写入SD卡
To implement saving you can pass a Bitmap
into the Canvas
constructor, then use the compress
method of Bitmap
to create an OutputStream
which can be written to the SD card
编辑回答您的评论:
当然,你可以使用XML来定义,因为 drawView函数
布局扩展视图,你可以在你的布局XML文件中使用它。
为的main.xml
布局文件的例子
EDIT to answer your comment:
Sure you can use XML to define your layout since DrawView
extends View you can use it in your layout xml file.
An example for the main.xml
layout file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/linearLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/gradient"
>
<Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<org.yourpackage.scribble.DrawView android:id="@+id/drawView1" android:layout_width="wrap_content" android:layout_height="wrap_content"> </at.gru.android.drawdemo.DrawView>
</LinearLayout>
这给了你这样的事情:
你只需要一个额外的contstructor 公共drawView函数(上下文的背景下,AttributeSet中的attrSet)根据
that gives you something like that:
You'll just need an additional contstructor public DrawView(Context context, AttributeSet attrSet)
这篇关于画在画布上,并保存图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!