2016-02-27 103 views
0

对不起,英语不好。我想创建一个图像并显示在一个片段中,当我使用editText中的OnLongClickListener()时,片段将弹出。位图大小超过32位editText.buildDrawingCache

,但我有一个像这样的输出:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.project.testingtexttoimage, PID: 23849 
java.lang.IllegalArgumentException: bitmap size exceeds 32bits 
at android.graphics.Bitmap.nativeCreate(Native Method) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:809) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:769) 
at android.view.View.buildDrawingCache(View.java:13649) 
at android.view.View.buildDrawingCache(View.java:13563) 
at com.project.testingtexttoimage.MainActivity$1.onLongClick(MainActivity.java:31) 
at android.view.View.performLongClick(View.java:4478) 
at android.widget.TextView.performLongClick(TextView.java:8652) 
at android.view.View$CheckForLongPress.run(View.java:18452) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5103) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 
at dalvik.system.NativeStart.main(Native Method) 

和我的MainActivity是这样的:

findViewById(R.id.buttonTest).setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 

     // make image from edit text 
     findViewById(R.id.editTextTest).measure(
       View.MeasureSpec.makeMeasureSpec(findViewById(R.id.editTextTest).getLayoutParams().width, View.MeasureSpec.EXACTLY), 
       View.MeasureSpec.makeMeasureSpec(findViewById(R.id.editTextTest).getLayoutParams().height, View.MeasureSpec.EXACTLY)); 
     findViewById(R.id.editTextTest).layout(0, 0, findViewById(R.id.editTextTest).getMeasuredWidth(), findViewById(R.id.editTextTest).getMeasuredHeight()); 
     findViewById(R.id.editTextTest).setDrawingCacheEnabled(true); 
     findViewById(R.id.editTextTest).buildDrawingCache(); 
     Bitmap bmp = Bitmap.createBitmap(findViewById(R.id.editTextTest).getDrawingCache()); 
     findViewById(R.id.editTextTest).setDrawingCacheEnabled(false); 


     // convert bitmap to byte array 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
     byte[] byteArrayBitmap = stream.toByteArray(); 

     // show fragment 
     SupportDialogFragment fragment 
       = SupportDialogFragment.newInstance(
       3 + 1, 
       1 + 2, 
       false, 
       false, 
       true, 
       false, 
       "Keep Trying Make Something Awesome !!!", 
       byteArrayBitmap 

     ); 
     fragment.show(getSupportFragmentManager(), "blur_sample"); 

     return true; 
    } 
}); 

顺便说一下,我用BlurFragment弹出.. THX您的帮助之前..

回答

0

解决所有这一个...

findViewById(R.id.editTextTest).measure(此代码不能用于查找高度和宽度,所以我改变高度和宽度,就像下面的代码一样,它的工作..不可信...非常好..

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     findViewById(R.id.editTextTest).setFocusable(false); 

     findViewById(R.id.buttonTest).setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 

       // get view 
       View view = findViewById(R.id.editTextTest); 
       view.setDrawingCacheEnabled(true); 

       // get height and width from scroll view 
       ScrollView scrollView = (ScrollView)findViewById(R.id.scroolView); 
       int totalHeight = scrollView.getChildAt(0).getHeight(); 
       int totalWidth = scrollView.getChildAt(0).getWidth(); 

       // set view 
       view.layout(0,0,totalWidth,totalHeight); 

       // build drawing cache 
       view.buildDrawingCache(true); 

       // bitmap storage 
       Bitmap bmp = Bitmap.createBitmap(view.getDrawingCache()); 

       // clear cache 
       view.setDrawingCacheEnabled(false); 

       // convert bitmap to byte array 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       byte[] byteArrayBitmap = stream.toByteArray(); 

       // show fragment 
       SupportDialogFragment fragment 
         = SupportDialogFragment.newInstance(
         3 + 1, 
         1 + 2, 
         false, 
         false, 
         true, 
         false, 
         "Keep Trying Make Something Awesome !!!", 
         byteArrayBitmap 

       ); 
       fragment.show(getSupportFragmentManager(), "blur_sample"); 

       return true; 
      } 
     }); 


    }