**
THIS QUESTION WAS SUCCESSFULLY ANSWERED AND HAS BECOME A BLOG POST <- click **
嗨,我是一个PHP开发人员,我想做一个简单的事情 – 我想绘制一个在Android手机空白页面上绘制的东西(手指带有大量“模拟笔尖”),并将位图存储为一个jpeg服务器通过http post.
这是我到目前为止,但是这是从a tutorial开始,涉及到写一个游戏的精灵.我不能适应
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); 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>
有人可以帮帮我吗?我觉得我很亲密 – 我用蓝色的笔尖作为笔尖,我只想“保存”这个,可能需要在XML页面上有一个按钮(或菜单)来做到这一点?我知道这是一个乞讨,但有很多人在线询问如何绘制与你的手指,并保存一些东西到“云”,如果人们可以回应代码的例子(不是参考)我保证我将编译这个成为一个适当的教程片段,为所有人的最终利益.包括我已经很满意的PHP服务器端代码.
解决方法
您可以尝试使用Google提出的Gesture对象,尝试执行以下代码:
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,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)); } }
希望你会发现这有帮助.