2013-06-19 10 views
8

Krótkie pytanie:Czy można zrobić zrzut ekranu widoku bez wyświetlania widoku?

Załóżmy, że mam jakiś plik układu i nadmuchuję go (lub używam normalnych CTOR w kodzie).

Zamiast pokazywać zawyżony widok, chciałbym zrobić "zrzut ekranu" (bitmapę), jak by wyglądał pod pewnymi ograniczeniami (o podanej szerokości & wysokości, nawet większej niż ekran).

Nie chcę dodawać widoku do dowolnego miejsca na ekranie, ale tylko trzymać go w tym celu i być może dodać go później.

Takie rzeczy mogą być przydatne do łatwego manipulowania sposobem umieszczania rzeczy. Na przykład, mógłbym użyć układu, w którym obraz zostanie umieszczony wewnątrz niego, tak aby miał wokół niego ramkę.

Czy coś takiego jest możliwe? Jeśli tak to jak?

+0

Czy to dla aplikacji testowej? Jeśli tak, to możesz sprawdzić com.android.systemui.screenshot.ScreenshotTest –

+0

co masz na myśli "Aplikacja testowa"? chcę o tym wiedzieć dla każdego rodzaju aplikacji. –

+0

Nie mogę przetestować go obecnie, ale widoki 'draw'-method, powinny być w stanie narysować na kanwie, nawet jeśli nie jest ono dodane do żadnego układu. Musisz jednak przejść przez wszystkie etapy projektowania swojego cyklu życia. http://developer.android.com/reference/android/view/View.html#draw%28android.graphics.Canvas%29 – Jave

Odpowiedz

7

OK, znalazłem możliwych sposobów, aby to zrobić, na podstawie this link:

public static Bitmap drawToBitmap(Context context,final int layoutResId, 
            final int width,final int height) 
{ 
    final Bitmap bmp = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888); 
    final Canvas canvas = new Canvas(bmp); 
    final LayoutInflater inflater = 
     (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final View layout = inflater.inflate(layoutResId,null); 
    layout.setDrawingCacheEnabled(true); 
    layout.measure(
     MeasureSpec.makeMeasureSpec(canvas.getWidth(),MeasureSpec.EXACTLY), 
     MeasureSpec.makeMeasureSpec(canvas.getHeight(),MeasureSpec.EXACTLY)); 
    layout.layout(0,0,layout.getMeasuredWidth(),layout.getMeasuredHeight()); 
    canvas.drawBitmap(layout.getDrawingCache(),0,0,new Paint()); 
    return bmp; 
} 

Przykład użycia:

public class MainActivity extends ActionBarActivity 
{ 
    @Override 
    protected void onCreate(final Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final ImageView iv = (ImageView)findViewById(R.id.image); 
     final DisplayMetrics metrics = getResources().getDisplayMetrics(); 
     final Bitmap b = drawToBitmap(this,R.layout.test, metrics.widthPixels, 
            metrics.heightPixels); 
     iv.setImageBitmap(b); 
    } 

} 
+0

NIE KLIKAJ NA POŁĄCZENIE W TYM ODPOWIEDZI !!! To jest adware !! – Sevren

+0

@ Nerves82 Został zmieniony od ostatniego razu. Nigdy bym tu nie stawiła tak kłopotliwej rzeczy. Również VirusTotal mówi, że jest ok, na podstawie 67 programów antywirusowych: https://www.virustotal.com/en/url/c3279c186440c89052ae0dbd9ac2c1ed5e0663904eed15eae5c49cae348b2f37/analysis/1460416779/ https://www.virustotal.com/en/url/51b003e759a05a34c58ebcb3078de02e73ee779dbffb54ab19ef0711fdd81af5/analysis/ 1460416787/ –

+0

@ Nerves82 W każdym razie, zaktualizowany link, aby pokazać poprzednią zawartość, używając Wayback –

Powiązane problemy