怎么在 Android 应用程序中用手指绘制东西……并将其保存到网络

本教程将介绍如何在 Android 应用程序中用手指绘制东西......并将其保存到网络的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么在 Android 应用程序中用手指绘制东西......并将其保存到网络 教程 第1张

问题描述

**这个问题已成功回答并已成为博客文章 <- click **

您好,我是一名 PHP 开发人员,我想做一件简单的事情 - 我想在 Android 手机的空白页面上绘制一些东西(用一根带有较大模拟笔尖"的手指)并将位图存储为通过 http post 在服务器上使用 jpeg.

这是我目前所拥有的,但这是取自 教程 涉及为游戏编写精灵.我无法适应它

package com.my.example;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;

public class DrawCapture extends Activity implements OnTouchListener{

 OurView v;
 Bitmap ball;
 float x,y;

 @Override
 protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.draw_capture);
  v = new OurView(this);
  v.setOnTouchListener(this);
  ball = BitmapFactory.decodeResource(getResources(), R.drawable.blueball);
  x = y = 0;
  setContentView(v);
 }

 @Override
 protected void onPause(){
  super.onPause();
  v.pause();
 }

 protected void onResume(){
  super.onResume();
  v.resume();
 }

 public class OurView extends SurfaceView implements Runnable{
  Thread t = null;
  SurfaceHolder holder;
  boolean isItOK = false;

  public OurView(Context context) {
super(context);
holder = getHolder();
  }

  public void run() {
while (isItOK == true){

 try {
  Thread.sleep(50);
 } catch (InterruptedException e) {
  e.printStackTrace();
 }

 //perform canvas drawing
 if (!holder.getSurface().isValid()){
  continue;
 }
 Canvas c = holder.lockCanvas();
 onDraw(c);
 holder.unlockCanvasAndPost(c);
} 
  }

  public void onDraw(Canvas c){
c.drawARGB(255, 210, 210, 210);
c.drawBitmap(ball, x - (ball.getWidth()/2), y - (ball.getHeight()/2), null);
  }

  public void pause(){
isItOK = false;
while(true){
 try{
  t.join();
 } catch(InterruptedException e){
  e.printStackTrace();
 }
 break;
}
t = null;
  }

  public void resume(){
isItOK = true;
t = new Thread(this);
t.start();
  }
 }

 public boolean onTouch(View v, MotionEvent me){

  switch (me.getAction()){
case MotionEvent.ACTION_DOWN : 
 x = me.getX();
 y = me.getY(); break;
case MotionEvent.ACTION_UP : 
 x = me.getX();
 y = me.getY(); break;
case MotionEvent.ACTION_MOVE : 
 x = me.getX();
 y = me.getY(); break;
  }
  return true;
 }
}

这里是 XML

<?xml version="1.0" encoding="utf-8"?>
<SurfaceView xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent" >


</SurfaceView>

有人可以帮帮我吗?我觉得我很接近 - 我使用 blueball 作为笔尖我只是想保存"它,可能我需要在 XML 页面上有一个按钮(或菜单)来执行此操作?我知道这有点乞求,但是有很多在线的人询问怎么用手指绘制并将某些内容保存到云",如果人们可以用代码示例(不是参考资料)做出回应) 我保证我会把它编译成一个合适的教程代码,最终让所有人受益.包括我已经非常满意的 PHP 服务器端代码.

推荐答案

你可以尝试使用谷歌提出的Gesture Object,尝试执行我的以下代码:

Activity1 xml:

<?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="#FFFFFF" >

  <android.gesture.GestureOverlayView
android:id="@+id/gestures"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fadeEnabled="false"
android:fadeOffset="5000000000"
android:gestureColor="#000000"
android:gestureStrokeType="multiple"
android:gestureStrokeWidth="1"
android:uncertainGestureColor="#000000"
android:layout_above="@+id/save_button" />

  <Button
android:id="@id/save_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20sp"
android:paddingLeft="20sp"
android:paddingRight="20sp"
android:text="Save"
android:textSize="22sp" />

 </RelativeLayout>

Activity1 java:

 package com.testandroidproject;

import java.io.ByteArrayOutputStream;

import android.app.Activity;
import android.content.Intent;
import android.gesture.GestureOverlayView;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Activity1 extends Activity {

 private Button button_save;
 private GestureOverlayView gesture;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  gesture = (GestureOverlayView) findViewById(R.id.gestures);
  button_save = (Button) findViewById(R.id.save_button);

  button_save.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
 try {
  Bitmap gestureImg = gesture.getGesture().toBitmap(100, 100,
 8, Color.BLACK);

  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  gestureImg.compress(Bitmap.CompressFormat.PNG, 100, bos);
  byte[] bArray = bos.toByteArray();

  Intent intent = new Intent(Activity1.this, Activity2.class);

  intent.putExtra("draw", bArray);
  startActivity(intent);

 } catch (Exception e) {
  e.printStackTrace();
  Toast.makeText(Activity1.this, "No draw on the string",
 3000).show();
 }
}
  });
 }

}

Activity2 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="#FFFFFF"
 android:orientation="vertical" >

 <ImageView
  android:id="@+id/image_saved"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal" />

</LinearLayout>

Activity2 java:

package com.testandroidproject;

import java.io.ByteArrayInputStream;

import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;


public class Activity2 extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  setContentView(R.layout.display_image);

  ImageView image = (ImageView) findViewById(R.id.image_saved);

  ByteArrayInputStream imageStreamClient = new ByteArrayInputStream(
 getIntent().getExtras().getByteArray("draw"));
  image.setImageBitmap(BitmapFactory.decodeStream(imageStreamClient));
 }

}

希望您会发现这对您有所帮助.

好了关于怎么在 Android 应用程序中用手指绘制东西......并将其保存到网络的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。