2012-01-05 15 views
8

मैं नीचे कोड का उपयोग करने के लिए उपयोग करता हूं, लेकिन ऐसा लगता है कि केवल डिस्प्ले स्क्रीन में सामग्री प्राप्त हो सकती है और सामग्री को डिस्प्ले स्क्रीन में नहीं मिल सकती है।स्क्रॉलव्यू में सभी सामग्री को बिटमैप में कैसे परिवर्तित करें?

क्या स्क्रॉल से भी सभी सामग्री प्राप्त करने का कोई तरीका है?

Bitmap viewBitmap = Bitmap.createBitmap(mScrollView.getWidth(),mScrollView.getHeight(),Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(viewBitmap); 
mScrollView.draw(canvas); 

उत्तर

15

हम नीचे

private void takeScreenShot() 
{ 
    View u = ((Activity) mContext).findViewById(R.id.scroll); 

    HorizontalScrollView z = (HorizontalScrollView) ((Activity) mContext).findViewById(R.id.scroll); 
    int totalHeight = z.getChildAt(0).getHeight(); 
    int totalWidth = z.getChildAt(0).getWidth(); 

    Bitmap b = getBitmapFromView(u,totalHeight,totalWidth);    

    //Save bitmap 
    String extr = Environment.getExternalStorageDirectory()+"/Folder/"; 
    String fileName = "report.jpg"; 
    File myPath = new File(extr, fileName); 
    FileOutputStream fos = null; 
    try { 
     fos = new FileOutputStream(myPath); 
     b.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
     fos.flush(); 
     fos.close(); 
     MediaStore.Images.Media.insertImage(mContext.getContentResolver(), b, "Screen", "screen"); 
    }catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

public Bitmap getBitmapFromView(View view, int totalHeight, int totalWidth) { 

    Bitmap returnedBitmap = Bitmap.createBitmap(totalWidth,totalHeight , Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(returnedBitmap); 
    Drawable bgDrawable = view.getBackground(); 
    if (bgDrawable != null) 
     bgDrawable.draw(canvas); 
    else 
     canvas.drawColor(Color.WHITE); 
    view.draw(canvas); 
    return returnedBitmap; 
} 
+0

यह है काम नहीं कर रहा है जब उपयोग scrollTo बार देखा गया है कि करना चाहते हैं आंतरिक रूप से अपनी सामग्री को स्क्रॉल http://developer.android.com/reference/android/view/View.html#scrollTo% 28int,% 20int% 29 –

+0

यह ठीक काम करता है .. धन्यवाद –

0

यहां मुद्दा यह है कि केवल वास्तविक पिक्सेल सामग्री जो मौजूद है वह है जो डिस्प्ले स्क्रीन पर दिखाई दे रही है। एंड्रॉइड और अन्य मोबाइल प्लेटफॉर्म मेमोरी उपयोग के बारे में बहुत सावधान हैं और स्क्रॉलिंग व्यू प्रदर्शन को बनाए रखने के तरीकों में से एक है ऑफस्क्रीन की कुछ भी नहीं खींचना। तो कहीं भी "पूर्ण" बिटमैप नहीं है - मेमोरी वाली सामग्री वाली मेमोरी रीसाइक्लिंग की जाती है।

1

आपको स्क्रॉलव्यू की कुल चौड़ाई और ऊंचाई प्राप्त करने की आवश्यकता है, या आपने देखा है कि बिटमैप स्क्रॉलव्यू की पूरी सामग्री को रखने के लिए बहुत छोटा है।

जांच के लिए इस लिंक Android: Total height of ScrollView

5

पॉप जवाब वास्तव में अच्छा है दिखाए गए कोड का उपयोग कर एक बिटमैप छवि के लिए एक scrollview की सभी सामग्री में बदल सकते हैं, लेकिन कुछ मामले में आप जब आप बिटमैप बनाते हैं तो आउटऑफमेमरी अपवाद को ट्रिगर कर सकता है जो वास्तव में एक बड़ा बिटमैप बनाना पड़ सकता है।

तो मैं एक छोटे से अनुकूलन स्मृति :)

public static Bitmap getBitmapFromView(View view, int totalHeight, int totalWidth) { 

    int height = Math.min(MAX_HEIGHT, totalHeight); 
    float percent = height/(float)totalHeight; 

    Bitmap canvasBitmap = Bitmap.createBitmap((int)(totalWidth*percent),(int)(totalHeight*percent), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(canvasBitmap); 

    Drawable bgDrawable = view.getBackground(); 
    if (bgDrawable != null) 
     bgDrawable.draw(canvas); 
    else 
     canvas.drawColor(Color.WHITE); 

    canvas.save(); 
    canvas.scale(percent, percent); 
    view.draw(canvas); 
    canvas.restore(); 

    return canvasBitmap; 
} 
1

यह एक काम करता है मुझे

बिटमैप जाँच क्रम अनुमति पहले बचाने के लिए के लिए के साथ धीरे होने के लिए बनाया

@OnClick(R.id.donload_arrow) 
    public void DownloadBitMap() 
    { 
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) 
    { 
     downloadData(); 
        Log.e("callPhone: ", "permission"); 
       } else { 
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); 
        Toast.makeText(this, "need permission", Toast.LENGTH_SHORT).show(); 
       } 

      } 

करने के लिए बिटमैप

private void downloadData() { 

     ScrollView iv = (ScrollView) findViewById(R.id.scrollView); 
     Bitmap bitmap = Bitmap.createBitmap(
       iv.getChildAt(0).getWidth()*2, 
       iv.getChildAt(0).getHeight()*2, 
       Bitmap.Config.ARGB_8888); 
     Canvas c = new Canvas(bitmap); 
     c.scale(2.0f, 2.0f); 
     c.drawColor(getResources().getColor(R.color.colorPrimary)); 
     iv.getChildAt(0).draw(c); 
     // Do whatever you want with your bitmap 
     saveBitmap(bitmap); 

    } 

बिटमैप बचाने के लिए

public void saveBitmap(Bitmap bitmap) { 
     File folder = new File(Environment.getExternalStorageDirectory() + 
       File.separator + "SidduInvoices"); 
     boolean success = true; 
     if (!folder.exists()) { 
      success = folder.mkdirs(); 
     } 
     if (success) { 
      // Do something on success 
     } else { 
      // Do something else on failure 
     } 

     File imagePath = new File(Environment.getExternalStorageDirectory() + "/SidduInvoices/Siddus.png"); 

     if(imagePath.exists()) 
     { 
      imagePath=new File(Environment.getExternalStorageDirectory() + "/SidduInvoices/Siddus"+custamername.getText().toString()+".png"); 

     } 
     FileOutputStream fos; 
     try { 
      fos = new FileOutputStream(imagePath); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
      fos.flush(); 
      fos.close(); 
      progressBar.cancel(); 


      final File finalImagePath = imagePath; 
      new SweetAlertDialog(this, SweetAlertDialog.SUCCESS_TYPE) 
        .setTitleText("Saved") 
        .setContentText("Do you want to share this with whatsapp") 
        .setCancelText("No,cancel !") 
        .setConfirmText("Yes,share it!") 
        .showCancelButton(true) 
        .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { 
         @Override 
         public void onClick(SweetAlertDialog sweetAlertDialog) { 
          sweetAlertDialog.cancel(); 
          shareImage(finalImagePath); 
         } 
        }) 
        .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() { 
         @Override 
         public void onClick(SweetAlertDialog sDialog) { 
          sDialog.cancel(); 

         } 
        }) 
        .show(); 




     } catch (FileNotFoundException e) { 
      Log.e("GREC", e.getMessage(), e); 
     } catch (IOException e) { 
      Log.e("GREC", e.getMessage(), e); 
     } 



    } 
+0

पूरी तरह से काम कर रहा है! धन्यवाद ।) –

संबंधित मुद्दे