» »

[Android] Splošno

[Android] Splošno

piki12 ::

Lep podrav vsem forumaši,
zanima me ali android apliakcija sama preklaplja med stanji:
http://developer.android.com/training/b...

potem me zanima katera plošča oz risalna površina je Prviprojekt.Panel ? (Prviprojekt) je ima mojega projekta

Hvala,

lp,
piki12
  • spremenilo: piki12 ()

Marat ::

Bolj ali manj "preklaplja" med stanji sama, ampak itak moraš v določena stanja (npr. onCreate) vnesti ukaze sam, da dosežeš željeno delovanje. Sicer pa prilepi svojo kodo sem gor in vprašaj direktno vprašanje, ker tko pavšalno je težko govorit.

piki12 ::

Pač ja kar si napisal je itak logično ampak če fukncije vržem oncreate(){} in ko to izvrši pomeni da bo avtomatsko preklopila v start in tako naprej kot kaže diagram. (kot procesni sistem stanj, kako je lahko proces v katerih stanjah)
Potem ja o tej komonenti xmlja me zanima da rišem na canvas, mogoče kaka dokumentacija to sem našel v primeru.

<mojprojekt.Panel
	    android:id="@+id/yourID"
	    android:layout_weight="0.94"
	    android:layout_width="fill_parent"
	    android:layout_height="0dp"
	    
	    />

piki12 ::

oz zanima me kako bi hranil stanje recmo da uprabik nariše eno črto in potem bi jaz hotel zaklučit aplikacijo ko naslednjič jo prižgem pa ta stanje ostane kar sem narisal :).

Dejcc ::

Eno črto najlažje shraniš s SharedPreferences

v onPause() shraniš začetno in končno točko:
SharedPreferences.Editor editor = getSharedPreferences("ime", 0).edit();
editor.putFloat("x1", x1);
...
editor.commit();


v onResume() pa prebereš kar si shranil:
SharedPreferences prefs = getSharedPreferences("ime", 0);
x1 = prefs.getFloat("x1", default_vrednost);
...


link

piki12 ::

Sicer hvala, samo kaj pa če ne veš koliko točk bo in kakšne oblike ter kakšne barve in vsega karkoli bo, oz bi teoretično lahko cel arraylist nekam shranil ker hranim notri to :)

Mavrik ::

Potem se pa načeloma za to uporabi nek fajl (ali pa baza, čeprav za take vrste podatkov ni tako primerna).
The truth is rarely pure and never simple.

piki12 ::

mogoče celo bi lahko z objectstremom shranu al kaj je že :) ker bo šlo za objekt in bi lahko nalagal ?

piki12 ::

Približno tak class imam jaz sedaj za shranjevanje vsega, če bi hotel zadevo razširit da si zapomni load picture, pa recimo še http://xjaphx.wordpress.com/2011/06/21/... (zakaj je računanje tele sepije tako zelo zelo zelo počasno).
(Glede da bi še tole dvoje rad dosegel bi verjetno moral naredit en abstrakti razred in iz njih izpeljat tri stvari za razne oblike, za load in za to počasno sepio)

public class AuditContainer {
    private Paint mPaint;
    private Path mPath;
    public AuditContainer(Path path, Paint paint) {
        mPath = path;
        mPaint = new Paint();

        mPaint.setAlpha(paint.getAlpha());
        mPaint.setColor(paint.getColor());
        mPaint.setStrokeWidth(paint.getStrokeWidth());
        mPaint.setStrokeJoin(paint.getStrokeJoin());
        mPaint.setStrokeCap(paint.getStrokeCap());
        mPaint.setAntiAlias(paint.isAntiAlias());
        mPaint.setDither(paint.isDither());
        mPaint.setStyle(paint.getStyle());
        mPaint.setMaskFilter(paint.getMaskFilter());
    }


}

Zgodovina sprememb…

  • spremenilo: piki12 ()

Mavrik ::

Počasno je ker ti vsak getPixel gre zaklenit bitmap, poiskat piksel in potem odklenit bitmap.

Če uporabiš metodo getPixels() in skopiraš podatke bitmapa v byte[] tabelo, jih obdelaš in jih potem s setPixels() daš nazaj v enem kosu bo zadeva bistveno hitrejša. Še hitrejša bo pa če napišeš ta del kode v Cju.
The truth is rarely pure and never simple.

piki12 ::

Ali si takole mislil:



    public static Bitmap createSepiaToningEffect(Bitmap src, int depth,
                                                 double red, double green, double blue) {
        // image size
        int width = src.getWidth();
        int height = src.getHeight();
        final double GS_RED = 0.3;
        final double GS_GREEN = 0.59;
        final double GS_BLUE = 0.11;

        // color information

        int A, R, G, B;
        int pixel;

        // scan through all pixels
        int[][] pixels = new int[width][height];
        for (int i = 0; i < width; ++i) {
            for (int j = 0; j < height; ++j) {
                // get pixel color
                pixels[i][j] = src.getPixel(i, j);
                // get color on each channel
            }}
        for (int i = 0; i < width; ++i) {
            for (int j = 0; j < height; ++j) {
                A = Color.alpha(pixels[i][j]);
                R = Color.red(pixels[i][j]);
                G = Color.green(pixels[i][j]);
                B = Color.blue(pixels[i][j]);
                // apply grayscale sample

                B = G = R = (int) (GS_RED * R + GS_GREEN * G + GS_BLUE * B);
                // apply intensity level for sepid-toning on each channel
                R += (depth * red);
                if (R > 255) {
                    R = 255;
                }

                G += (depth * green);
                if (G > 255) {
                    G = 255;
                }

                B += (depth * blue);
                if (B > 255) {
                    B = 255;
                }

                pixels[i][j]= Color.argb(A, R, G, B);

            }}

                // set new pixel color to output image
        for (int i = 0; i < width; ++i) {
            for (int j = 0; j < height; ++j) {
        src.setPixel(i, j, pixels[i][j]);
            }
        }


        // return final image

        return src;
    }

piki12 ::

Na katero lokacijo v telefonu pa lahko shranim sedaj objekte oz fijl ?

Mavrik ::

Odvisno, kaj hočeš potem s tistim fajlom narest? A ga mora user videt? Drugi appi? Samo tvoj app?

Vse je zelo lepo napisano v Android developer dokumentaciji.
The truth is rarely pure and never simple.

Zgodovina sprememb…

  • spremenil: Mavrik ()

piki12 ::

Aha hvala bom prebral, kaj praviš sem kodo pravilno dodelal, ali sem falil bistvo ?
ps: za kateri objekt sploh gre da si preberem, če mogoče veš :
<mojprojekt.Panel
        android:id="@+id/yourID"
        android:layout_weight="0.94"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
         
        />

Mavrik ::

Gre se za razred "Panel" v paketu mojprojekt. Jasno ;)
The truth is rarely pure and never simple.

piki12 ::

Panel se imenuje moj class ?

piki12 ::

PS: že 2 dni se zafrkavam z shranjevanjem slike preizkusil sem 1000 in 1 varjanto z stacka, pa nobena ne deluje:


            try
            {
                String mBaseFolderPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/PhysicsSketchpad/";

                String mFilePath = mBaseFolderPath + filename;


                FileOutputStream stream = new FileOutputStream(mFilePath);

                bitmapToSave.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                stream.flush();
                stream.close();
            }
            catch(Exception e)
            {
                Log.e("Could not save", e.toString());
            }

Mavrik ::

Joj model, daj se čimprej odvadi lovit generične Exceptione, ker boš samo bedarije s tem delal. Če stvar vrže IOException, potem ujami proklet IOException, ne pa da si skriješ še kup drugih napak s to lenobo.

Zdaj pa lepo zbriši ta crap (ker ti skriva stack trace) in pojdi v logcat pogledat exception, ki ga dobiš.
The truth is rarely pure and never simple.

piki12 ::

Tole naj bi bilo tole :D..

<1> main@830002594240, prio=5, in group 'main', status: 'RUNNING'
	  at android.os.Parcel.writeInt(Parcel.java:-1)
	  at android.os.Bundle.writeToParcel(Bundle.java:1548)
	  at android.os.Parcel.writeBundle(Parcel.java:502)
	  at android.app.ActivityManagerProxy.activityPaused(ActivityManagerNative.java:1615)
	  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2302)
	  at android.app.ActivityThread.access$1700(ActivityThread.java:117)
	  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:942)
	  at android.os.Handler.dispatchMessage(Handler.java:99)
	  at android.os.Looper.loop(Looper.java:130)
	  at android.app.ActivityThread.main(ActivityThread.java:3691)
	  at java.lang.reflect.Method.invokeNative(Method.java:-1)
	  at java.lang.reflect.Method.invoke(Method.java:507)
	  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
	  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
	  at dalvik.system.NativeStart.main(NativeStart.java:-1)

Zgodovina sprememb…

  • spremenilo: piki12 ()

Mavrik ::

Nop, to ni stack trace crasha. Daj v IOException handler še e.printstacktrace pa poglej tisto.
The truth is rarely pure and never simple.

piki12 ::

Zgleda kr cool tale pot, veš kje je problem pri streamu, naprej od strema ne morem pridet :(..
java.io.FileNotFoundException: /mnt/sdcard/PhysicsSketchpad/20130715_00:27:13.png (Invalid argument)

Mavrik ::

Dvopičje pač ni veljaven znak v imenu datoteke na FAT datotečnih sistemih, ki so na SD karticah. ;)
The truth is rarely pure and never simple.

piki12 ::

Oki sedaj sem usposobil in deluje, samo problem je da je odpiranje slike počasno in traja 12 sekund odpiranje enga bogega pngčka. Kako je to možno. Kako to izboljšat.

Mavrik ::

Jah, saj nimaš tam Core i7 pri 3GHz not. Kako velik pa je ta PNGjček?
The truth is rarely pure and never simple.

piki12 ::

13kb :), od ostalih apliakcij potrebuje manj časa :D

Zgodovina sprememb…

  • spremenilo: piki12 ()

Mavrik ::

Uporabiš traceview.
The truth is rarely pure and never simple.

piki12 ::

Aha,
veš kaj sem ugotovil shranjeno sliko na lokaciji /sdcard/mojeslike/ tukaj not imam 4 slike. Eno sem izbrisal, in mediji in vsa oprema je naredila šeeno branje, sedaj mi zadevo najde v galeriji, prebere v trenutku tako kot vse ostale slike, mogoče veš kako to narediti programsko, da se bo vse postavilo tako kot je treba ?

Mavrik ::

Ne razumem. Kaj hočeš točno doseč s to sliko, ki jo shraniš?
The truth is rarely pure and never simple.

piki12 ::

Imeti shranjeno, na neki lokaciji na disku oz na kartici. Čisti primer: Narišeš sliko z photoshopom verjetno si jo želiš shranjeno met, ko končaš, da jo lahko občoduješ :) Seveda jaz ne morem narisat takih slik ker pač lahko rišem le črto. Ampak point je vaja :) Mogoče kak predlog in hvala že vnaprej..

Mavrik ::

Ja fajn, saj maš shranjeno zdaj na SD kartico. O kakšnih 12 sekundah zdaj ti razlagaš?
The truth is rarely pure and never simple.

piki12 ::

ko pač najdem SD kartici to sliko in jo kliknem odpera to sliko 12 sekund. Ko pa nekaj refrešam da se vse znova prebere vse šeenkrat z kartice, pa mi jo odpre takoj in jo tudi najdem v galeriji, pred tem ne :( .. Kakor da se jo sistem nebi zavedal da obstaja ta slika pred tem...

Zgodovina sprememb…

  • spremenilo: piki12 ()

Mavrik ::

S čim "odpreš"?
The truth is rarely pure and never simple.

piki12 ::

Default Galerijo ki je bila že na mašinci inštalerana.

Mavrik ::

No fajn. Če bi prebral dokumentacijo bi pogruntal, da se galerije in muzika skenirajo periodično (baterija). Zato moraš skenerju ročno povedat, da si dodal datoteko če hočeš da se pojavi takoj:

MediaScannerConnection.scanFile(context, new String[] { "/sdcard/mojaslika.png" }, new String[] { "image/png" }, null);


Zatem bo OS poskeniral datoteko, zgeneriral thumbnail in jo dodal v galerijo.
The truth is rarely pure and never simple.

piki12 ::

No fajn da sedaj dela tako kot more, zanima me sedaj zakaj rabmo canvas zaklent in sinhronizirat:
http://www.helloandroid.com/tutorials/h...

 public void run() {
        Canvas c;
        while (_run) {
            c = null;
            try {
                c = _surfaceHolder.lockCanvas(null);
                synchronized (_surfaceHolder) {
                    _panel.onDraw(c);
                }
            } finally {
                // do this in a finally so that if an exception is thrown
                // during the above, we don't leave the Surface in an
                // inconsistent state
                if (c != null) {
                    _surfaceHolder.unlockCanvasAndPost(c);
                }
            }
        }

Zgodovina sprememb…

  • spremenilo: piki12 ()

piki12 ::

Kakšna je razlika med bitmapom in canvasom z obema se da neki risat :)..


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[android] java.lang.RuntimeException

Oddelek: Programiranje
141070 (762) piki12
»

Programiranje problem android

Oddelek: Programiranje
51163 (928) g333kk
»

android črta

Oddelek: Programiranje
412389 (1660) g333kk
»

[android] vstavljanje slike

Oddelek: Programiranje
71232 (1129) messi
»

[android] crash

Oddelek: Programiranje
61329 (1138) messi

Več podobnih tem