gpt4 book ai didi

java - 从 GestureOverlayView 生成位图

转载 作者:行者123 更新时间:2023-11-30 09:43:13 24 4
gpt4 key购买 nike

我有一个应用程序需要捕获客户的签名,然后将其显示在 ImageView 中。为了概念验证,我编写了一个小型应用程序,其布局在顶部有一个 GestureOverlayView,然后是一个“保存签名”按钮,然后是下面的一个 ImageView。当我按下保存签名按钮时,它应该从 GestureOverlayView 创建一个图像并将其显示在 ImageView 中。下面是代码/布局,然后是问题列表:

布局:

<?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.gesture.GestureOverlayView android:id="@+id/GestureView"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#FFFFFF"
android:fadeEnabled="false"
android:gestureStrokeType="multiple"
android:gestureStrokeWidth="1.5"
android:gestureColor="#000000"
android:fadeOffset="600000"
android:eventsInterceptionEnabled="false"
android:alwaysDrawnWithCache="true">
</android.gesture.GestureOverlayView>
<Button android:id="@+id/SubmitButton"
android:text="Save Signature"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<ImageView android:id="@+id/ImageView"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#FFFFFF">
</ImageView>
</LinearLayout>

代码:

public class TestActivity extends Activity {
ImageView iv;
GestureOverlayView gv;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

iv = (ImageView)findViewById(R.id.ImageView);
gv = (GestureOverlayView)findViewById(R.id.GestureView);

Button submitButton = (Button)findViewById(R.id.SubmitButton);
submitButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bitmap b = Bitmap.createBitmap(gv.getDrawingCache());
iv.setImageBitmap(b);
}
});
}
}

每次在 createBitmap() 方法上我都会得到一个空指针异常。我相信这是因为 gv.getDrawingCaches() 返回 null。如您所见,绘图缓存已启用,因此它应该返回一些东西!

这是日志:

FATAL EXCEPTION: main
java.lang.NullPointerException
at android.graphics.Bitmap.createBitmap(Bitmap.java:358)
at com.pgov.barcode.TestActivity$2.onClick(TestActivity.java:42)
at android.view.View.performClick(View.java:2408)
at android.view.View$PerformClick.run(View.java:8816)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

我们将不胜感激任何帮助!

最佳答案

显然我回答了我自己的问题。即使我使用:

android:alwaysDrawnWithCache="true"

我将代码更改为:

gv.setDrawingCacheEnabled(true);
Bitmap b = Bitmap.createBitmap(gv.getDrawingCache());
iv.setImageBitmap(b);
gv.setDrawingCacheEnabled(false);

而且有效!不确定为什么 XML 标志不影响它......

关于java - 从 GestureOverlayView 生成位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8419238/

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