java - Save view like bitmap, I only get black screen -
i have drawing application , have methods saving pictures drawn. black bitmap picture save button. problem ?
there xml
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/all" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" tools:context=".circle" > <org.vkedco.mobappdev.draw_touch_drive_00001.krouzky android:id="@+id/pntr" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_alignparenttop="true" android:tag="painter" /> <textview android:id="@+id/textview3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignleft="@+id/textview3" android:layout_below="@+id/button4" android:layout_margintop="50dp" android:text="value" android:textcolor="@color/white" /> <button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparenttop="true" android:layout_torightof="@+id/button2" android:text="add" /> <button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentright="true" android:layout_alignparenttop="true" android:text="delete" /> <button android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_alignparenttop="true" android:text="save" android:layout_margintop="45dp" android:layout_alignleft="@+id/button3" /> <button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentright="true" android:layout_alignparenttop="true" android:text="clear" android:layout_margintop="45dp" android:layout_alignright="@+id/button3" /> <linearlayout android:orientation="vertical" android:layout_height="match_parent" android:id="@+id/linearlayout" android:layout_width="match_parent" />
and main activity:
public class aktivita extends activity{ button btn; public linearlayout mcontent; krouzky mtictactoeview = null; public static string tempdir; public file mypath; public static bitmap mbitmap; public static int width; public static int height; public static float x; public static float y; public static float x; public static float y; public static double vzdalenost; public string current = null; private string uniqueid; public krouzky msignature; public view mview; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.zaznam_ran); krouzky.t = 0; file directory = new file(environment.getexternalstoragedirectory() + "/images"); if(!directory.exists()) directory.mkdir(); uniqueid = gettodaysdate() + "_" + getcurrenttime(); current = uniqueid + ".png"; mypath= new file(directory,current); mcontent = (linearlayout) findviewbyid(r.id.linearlayout); msignature = new krouzky(this, null); msignature.setbackgroundcolor(color.transparent); mcontent.addview(msignature, layoutparams.fill_parent, layoutparams.fill_parent); mview = mcontent; display display = getwindowmanager().getdefaultdisplay(); width = (display.getwidth()); height = (display.getheight()); mtictactoeview = (krouzky) this.findviewbyid(r.id.pntr); button btn6 = (button) findviewbyid(r.id.button6); btn6.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { log.v("log_tag", "panel saved"); mview.setdrawingcacheenabled(true); save(v); } }); } private boolean preparedirectory() { try { if (makedirs()) { return true; } else { return false; } } catch (exception e) { e.printstacktrace(); toast.maketext(this, "could not initiate file system.. sdcard mounted properly?", 1000).show(); return false; } } private boolean makedirs() { file tempdir = new file(tempdir); if (!tempdir.exists()) tempdir.mkdirs(); if (tempdir.isdirectory()) { file[] files = tempdir.listfiles(); (file file : files) { if (!file.delete()) { system.out.println("failed delete " + file); } } } return (tempdir.isdirectory()); }
method saving
public void save(view v) { log.v("log_tag", "width: " + v.getwidth()); log.v("log_tag", "height: " + v.getheight()); if(mbitmap == null) { mbitmap = bitmap.createbitmap (width, height, bitmap.config.rgb_565); } canvas canvas = new canvas(mbitmap); try { fileoutputstream mfileoutstream = new fileoutputstream(mypath); v.draw(canvas); mbitmap.compress(bitmap.compressformat.png, 90, mfileoutstream); mfileoutstream.flush(); mfileoutstream.close(); } catch(exception e) { log.v("log_tag", e.tostring()); } }
my problem, resolved, have 1 small detail. application down, when change xml. this.
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" tools:context=".circle" > <org.vkedco.mobappdev.draw_touch_drive_00001.krouzky android:id="@+id/pntr" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_alignparenttop="true" android:tag="painter" /> <button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparenttop="true" android:layout_torightof="@+id/button2" android:text="add" /> <button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentright="true" android:layout_alignparenttop="true" android:text="delete" /> <button android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_alignparenttop="true" android:text="save" android:layout_margintop="45dp" android:layout_alignleft="@+id/button3" /> <button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentright="true" android:layout_alignparenttop="true" android:text="clear" android:layout_margintop="45dp" android:layout_alignright="@+id/button3" /> <linearlayout android:orientation="vertical" android:layout_height="match_parent" android:id="@+id/linearlayout" android:layout_width="match_parent" > </linearlayout> <textview android:id="@+id/textview3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_below="@+id/button6" android:layout_margintop="21dp" android:text="value" android:textcolor="@color/blue" />
actually passing view (v) of button btn6 in method save(v)
- pass linear layout object mcontent
or mview
, save(mcontent)
, solve problem
you can try method also-
pass parent layout or view in method-
bitmap file = save(mcontent); bitmap save(view v) { bitmap b = bitmap.createbitmap(v.getwidth(), v.getheight(), bitmap.config.argb_8888); canvas c = new canvas(b); v.draw(c); return b; }
Comments
Post a Comment