2012-12-12 4 views
1

Я относительный макет с именем rel, который динамически добавляет ImageView к нему так:пытается взять снимок экрана зрения и его ребенок

 rel.setBackgroundResource(R.drawable.bg_share_one); 

       RelativeLayout.LayoutParams p1 = new RelativeLayout.LayoutParams(921, 691); 
       p1.leftMargin = 30; 
       p1.topMargin = 30; 

       ImageView img = new ImageView(this); 
       img.setLayoutParams(p1); 
       myBitmap = BitmapFactory.decodeFile(files[0].getAbsolutePath(), option1); 
       img.setImageBitmap(myBitmap); 

       rel.addView(img); 
       saveCompareImage(); 

я затем вызвать этот метод, чтобы сделать снимок экрана, что относительный макет, но добавленное изображение не отображается в растровом изображении:

protected void saveCompareImage() { 
    // TODO Auto-generated method stub 

    rel.setDrawingCacheEnabled(true); 
    try { 

     File file = new File("/sdcard/LC/compare.jpg"); 
     file.createNewFile(); 
     Bitmap bm = rel.getDrawingCache(); 
     FileOutputStream ostream = new FileOutputStream(file); 
     bm.compress(Bitmap.CompressFormat.JPEG, 80, ostream); 
     ostream.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

ответ

1

Возможно, у вас есть аппаратное ускорение включено? Документация setDrawingCacheEnabled() утверждает, что в этом случае рендеринг выполняется по-разному:

Когда аппаратное ускорение включено, что позволяет кэш чертежа не оказывает никакого влияния на рендеринг, так как система использует другой механизм ускорения, который игнорирует флаг. Если вы хотите использовать растровое изображение для представления, даже если аппаратное ускорение включено, см. setLayerType (int, android.graphics.Paint) для получения информации о том, как включить программные и аппаратные уровни.

Пробег: setLayerType(LAYER_TYPE_SOFTWARE, null) или что-то еще.

+0

это будет относительное расположение, которое получает этот или в ImageView я добавляю к нему .. я пытался как и никакой разницы .. до сих пор нет ImageView не показывать up – erik

+0

Я не уверен, никогда не пробовал это сам, просто увидел часть API Doc. Думаю, вам придется использовать его в макете и в изображении обоих. – Ridcully

+0

nope не работает – erik

0

проблема не звала меру: это работает:

protected void saveCompareImage() { 
    // TODO Auto-generated method stub 

    rel.setDrawingCacheEnabled(true); 

    try { 
     File file = new File("/sdcard/LC/compare.jpg"); 
     file.createNewFile(); 
     Bitmap bitmap; 
     rel.setDrawingCacheEnabled(true); 
     rel.measure(MeasureSpec.makeMeasureSpec(rel.getLayoutParams().width, MeasureSpec.EXACTLY), 
       MeasureSpec.makeMeasureSpec(rel.getLayoutParams().height, MeasureSpec.EXACTLY)); 
     rel.layout(0, 0, rel.getMeasuredWidth(), rel.getMeasuredHeight()); 

     bitmap = Bitmap.createBitmap(rel.getDrawingCache()); 


     FileOutputStream ostream = new FileOutputStream(file); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream); 
     ostream.close(); 
    } catch (Exception e) { 
     Log.v("ERRRO","e:"+e); 
    } 
} 
+0

Рад, что вы нашли решение. – Ridcully

Смежные вопросы