2011-12-07 38 views
2

我有一個應用程序需要捕獲客戶的簽名,然後將其呈現在ImageView中。對於概念驗證,我寫了一個小應用程序,其頂部有一個帶有GestureOverlayView的佈局,然後是一個「Save Signature」按鈕,然後是一個ImageView。當我按保存簽名按鈕時,它應該從GestureOverlayView創建一個圖像並將其顯示在ImageView中。下面是代碼/佈局,然後的問題的列表:從GestureOverlayView生成位圖

佈局:

<?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。正如你所看到的,繪圖緩存已啓用,所以它應該返回SOMETHING!

這裏的logcat的:

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) 

任何和所有幫助將不勝感激!

+0

你得到一個空指針例外,其中?請發佈您的堆棧跟蹤,並指出引發異常的行。 –

+0

logcat請... –

+0

更新的主要帖子,對不起,我正在出去吃午飯,並很快發佈;-) –

回答

2

顯然我回答了我自己的問題。雖然我用:

android:alwaysDrawnWithCache="true" 

我改變了代碼:

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

和它的作品!不知道爲什麼XML標誌不會影響它雖然...