Android 如何保存画布图形并在单击按钮时显示它
嘿,我正在尝试创建一个android应用程序,我可以在画布上用底部的两个按钮画画 我设法让绘图正常工作,但是现在我需要添加两个按钮(一个用于将绘图画布保存到数据库(Sqlite,如果可能)或位图中,另一个用于从Sqlite导入图像并将其显示到graphicview中) 现在我不知道我必须在其中输入什么代码才能使“保存和显示”按钮正常工作,因此请帮助我输入代码,并感谢您抽出时间:) 这是我目前的代码(图形绘图工作正常,现在我需要保存和显示按钮的代码,以及我在graphicview.java和MainActivity.java中遗漏的代码) GraphicsView.javaAndroid 如何保存画布图形并在单击按钮时显示它,android,eclipse,canvas,save,Android,Eclipse,Canvas,Save,嘿,我正在尝试创建一个android应用程序,我可以在画布上用底部的两个按钮画画 我设法让绘图正常工作,但是现在我需要添加两个按钮(一个用于将绘图画布保存到数据库(Sqlite,如果可能)或位图中,另一个用于从Sqlite导入图像并将其显示到graphicview中) 现在我不知道我必须在其中输入什么代码才能使“保存和显示”按钮正常工作,因此请帮助我输入代码,并感谢您抽出时间:) 这是我目前的代码(图形绘图工作正常,现在我需要保存和显示按钮的代码,以及我在graphicview.java和Mai
package org.example.graphics;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Path.Direction;
import android.view.*;
public class GraphicsView extends View implements View.OnTouchListener {
public GraphicsView(Context context) {
super(context);
setBackgroundColor(Color.WHITE);
setOnTouchListener(this);
}
ArrayList<MyPoint> arrOfPoints=new ArrayList<MyPoint>();
class MyPoint
{
float x, y;
}
float downx, downy;
@Override
protected void onDraw(Canvas canvas) {
// Drawing commands go here
Paint rectPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
rectPaint.setStyle(Paint.Style.FILL_AND_STROKE);
rectPaint.setColor(Color.BLACK);
canvas.drawRoundRect(new RectF(0, 0, 100, 100), 10, 10, rectPaint);
rectPaint.setColor(Color.BLUE);
rectPaint.setAlpha(40);
canvas.drawCircle(300, 300, 200, rectPaint);
canvas.drawRect(new RectF(40, 40, 200, 200), rectPaint);
Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG
| Paint.STRIKE_THRU_TEXT_FLAG);
canvas.drawText("Hello there!", 200, 200, textPaint);
canvas.drawText("You clicked on " + downx + "," + downy, 200, 600,
textPaint);
for(int i=0;i<arrOfPoints.size();i++)
{
canvas.drawCircle(arrOfPoints.get(i).x, arrOfPoints.get(i).y, 20, rectPaint);
}
}
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
int action = arg1.getAction();
MyPoint p=null;
switch (action) {
case MotionEvent.ACTION_DOWN:
downx = arg1.getX();
downy = arg1.getY();
p=new MyPoint();
p.x=arg1.getX();p.y=arg1.getY();
arrOfPoints.add(p);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
downx = arg1.getX();
downy = arg1.getY();
p=new MyPoint();
p.x=arg1.getX();p.y=arg1.getY();
arrOfPoints.add(p);
invalidate();
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return true;
}
package org.example.graphics;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Path.Direction;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GraphicsView(this));
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background">
<org.example.graphics.GraphicsView
android:id="@+id/graphics"
android:layout_width="fill_parent"
android:layout_height="341dp" />
<Button
android:id="@+id/ChoosePictureButton"/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Choose Picture"
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Save Picture" android:id="@+id/SavePictureButton"/>
</LinearLayout>
android:layout\u width=“fill\u parent”
android:layout\u height=“包装内容”
android:text=“选择图片”
My AndroidManifest.xml仍处于默认状态,因为我尚未编辑其中的任何内容您可以在保存按钮单击侦听器中使用此代码
int canvasWidth = 500;
int canvasHeight = 500;
View v = new GraphicsView(MainActivity.this);
Bitmap bitmap = Bitmap.createBitmap(canvasWidth, canvasHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
v.draw(canvas);
//now bitmap has your canvas image
//set it to your ImageView
yourImageView.setImageBitmap(bitmap);
//or save to sdcard
File dir = new File("/sdcard/yourAppFolder/");
if (!dir.isDirectory()) {
dir.mkdirs();
}
File outputFile = new File(dir, "image.jpg");
OutputStream fout = null;
fout = new FileOutputStream(outputFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fout);
fout.flush();
fout.close();
将画布另存为PNG文件,然后通过ImageView加载。我在哪里添加PNG文件的代码?在mainactivity或graphicsview中?那么我必须在mainactivity.java中添加保存按钮的方法吗?抱歉,我还是android新手,我还没有在MainActivity.java中添加任何内容yet@KopArtist:是的,您需要将其添加到MainActivity.java中非常感谢您的回复这是我在MainActivity.java中的新代码。我很确定它是不正确的,你能告诉我我做错了什么吗?@KopArtist:你需要声明按钮,然后你可以添加click listener到它,签出这个答案我在MainActivity.java中修复了我的代码[这是正确的代码吗?为什么我仍然在“v”上出错?”