gpt4 book ai didi

android - 如何在 Android 应用程序中用手指画画……并将其保存到网络

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:54 24 4
gpt4 key购买 nike

** THIS QUESTION WAS SUCCESSFULLY ANSWERED AND HAS BECOME A BLOG POST <- click **

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

这是我目前所拥有的,但这是取自 a tutorial这与为游戏编写 Sprite 有关。我无法适应它

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 作为 Nib 我只是想“保存”这个并且可能我需要在 XML 页面上有一个按钮(或菜单)来执行此操作?我知道这有点勉强,但是网上有很多的人询问如何用手指画画并将某些东西保存到“云”中,如果人们可以用代码示例(不是引用)来回应的话) 我保证我会把它编译成一段适当的教程代码,以造福于所有人。包括我已经非常满意的 PHP 服务器端代码。

最佳答案

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

Activity 1 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 - 如何在 Android 应用程序中用手指画画……并将其保存到网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11631700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com