2011-12-07 7 views
2

고객의 서명을 캡처하여 ImageView에 표시해야하는 앱이 있습니다. 개념 증명을 위해 상단에 GestureOverlayView가있는 레이아웃을 가진 작은 응용 프로그램을 작성한 다음 "서명 저장"버튼을 클릭 한 다음 아래에 ImageView를 작성했습니다. Save Signature 버튼을 누르면 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에 널 (null) 포인터 예외마다 시간을 얻을() 메소드를 호출합니다. 나는 그것이 gv.getDrawingCaches()가 null을 돌려주기 때문이라고 생각한다. 보시다시피, 캐시 IS를 사용하도록 설정하면 무언가를 반환해야합니다!

다음은 로그 캣입니다 :

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

어디에서 널 포인터 예외가 발생합니까? 스택 추적을 게시하고 예외를 throw하는 행을 표시하십시오. –

+0

logcat please ... –

+0

업데이트 된 메인 포스트, 점심 시간에 나가서 빨리 게시했습니다. ;-) –

답변

2

분명히 내 자신의 질문에 대답했습니다. 비록 내가 사용 :

android:alwaysDrawnWithCache="true" 

나는에 코드를 변경 :

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

그리고 그것은 작동한다! 그래도 XML 플래그가 영향을 미치지 않는 이유는 확실하지 않습니다 ...

관련 문제