Forum » Programiranje » Android zamenjava pogledov
Android zamenjava pogledov
g333kk ::
Lp,
Želim namesto Bitmap pp= Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true); uprabit tako da bi spremenil le matrix in nič dugega,( kar pa pomeni da bi sliko samo obrnil, brez createBitmap,) ker trenutno mi onemogoča nadaljno risanje, tak sistem ... R
Drugo vprašanje: Zakaj mi verzija dela na nekaterih telefonih na drugih ne,. In kako se zadeva naredi prilagodljiva vsem verzijam oz vsaj večini
Želim namesto Bitmap pp= Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true); uprabit tako da bi spremenil le matrix in nič dugega,( kar pa pomeni da bi sliko samo obrnil, brez createBitmap,) ker trenutno mi onemogoča nadaljno risanje, tak sistem ... R
public static Bitmap flip(Bitmap src, int type) { // create new matrix for transformation Matrix matrix = new Matrix(); // if vertical if(type == FLIP_VERTICAL) { // y = y * -1 matrix.preScale(1.0f, -1.0f); } // if horizonal else if(type == FLIP_HORIZONTAL) { // x = x * -1 matrix.preScale(-1.0f, 1.0f); // unknown type } else { return null; } // return transformed image //Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true); Bitmap pp= Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true); return pp; }
Drugo vprašanje: Zakaj mi verzija dela na nekaterih telefonih na drugih ne,. In kako se zadeva naredi prilagodljiva vsem verzijam oz vsaj večini
- spremenilo: g333kk ()
c00L3r ::
Ne vem, če gre sliko obrnit brez nove instance Bitmap. Imam sam en app, ki dela nekaj z manupulacijo/generiranjem slik. Jaz sicer v onDraw metodi operiram s sliko in jo rotiram z:
Boš moral bit malo bolj specifičen. Kaj pomeni ne dela? Ni slike, je napačna slika, je crash? Če je crash, kaj pravi stack trace?
Aja, še en nastvet. Ko bitmap objekta več ne potrebuješ, uporabi metodo recycle na njem, da poveš VM, da se lahko ta pomnilnik sprosti.
Matrix matrix = new Matrix(); matrix.postRotate(rotateAngle);
Drugo vprašanje: Zakaj mi verzija dela na nekaterih telefonih na drugih ne.
Boš moral bit malo bolj specifičen. Kaj pomeni ne dela? Ni slike, je napačna slika, je crash? Če je crash, kaj pravi stack trace?
Aja, še en nastvet. Ko bitmap objekta več ne potrebuješ, uporabi metodo recycle na njem, da poveš VM, da se lahko ta pomnilnik sprosti.
g333kk ::
Ni crash, dogaja se nekako takole:
Rišem po zaslonu, vendar se mi ne prikaže, potem pa kliknem save in tam shrani, kar sem narisal vse normalno, samo ne izrisuje, na zaslon. (Črte ki jih narišem)
Hja jaz objekte skos potrebujem saj morajo bit skos izrisani, na zaslonu ..
Rišem po zaslonu, vendar se mi ne prikaže, potem pa kliknem save in tam shrani, kar sem narisal vse normalno, samo ne izrisuje, na zaslon. (Črte ki jih narišem)
Hja jaz objekte skos potrebujem saj morajo bit skos izrisani, na zaslonu ..
c00L3r ::
Predvidevam da override-aš onDraw() metodo v svojem razredu dedovanem iz View? Ali rišeš kako drugače? Da prožiš onDraw() moraš poklicat .invalidate() nad svojim view-em. Ko se onDraw() zaključi ostanejo stvari še vedno narisane, dokler se spet ne kliče onDraw in "prepleska", kar je bilo prej narisano.
Ne rabiš pa vsakič na novo tvorit vseh objektov. Bitmap imaš lahko npr. shranjen kot spremenljivko v objektu. Kratek psevdokod:
Ne rabiš pa vsakič na novo tvorit vseh objektov. Bitmap imaš lahko npr. shranjen kot spremenljivko v objektu. Kratek psevdokod:
class mojView extends View{ Bitmap mojaSlika = null; public void onDraw(Canvas canvas){ if (mojaSlika == null){ mojaSlika = naloziSliko(); --primer pomozne metode za nalaganje slike } canvas.drawBitmap(...); } }
g333kk ::
Praktično imam tri draw metode:
- na tmpBitmap rišem začasno
- na mBitmap ko končam na tmpBitmap
- potem pa še nekega za undo ki mi shranjuje zapise..
Nekako takole zgleda moja koda:
Android paint: imam samo za gumbe in spinnerje..
Draw handler:
- vse oblike ki jih izrisujem,
- in handletouchEvent:
Panel:
+ še vse metode kot so pixel,hue itd razmišlajm o tem da bi jih naredil na osnovi c-ja ali pa česa drugega, ker so svinsko počasne do 10 sekund na simulatorju na telefonu do 2 sekunde..
-shape
-line
-rectangle
Po večini je to to....
- na tmpBitmap rišem začasno
- na mBitmap ko končam na tmpBitmap
- potem pa še nekega za undo ki mi shranjuje zapise..
Nekako takole zgleda moja koda:
Android paint: imam samo za gumbe in spinnerje..
Draw handler:
- vse oblike ki jih izrisujem,
- in handletouchEvent:
public void handleTouchEvent(MotionEvent event) { Point point = new Point(event.getX(), event.getY()); if(SELECTED_SHAPE == SHAPES.ERASE) { mCurrentPaint = mErasePaint; } else mCurrentPaint = mPaint; switch(event.getAction()) { case MotionEvent.ACTION_DOWN: mDownPoint = point; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_MOVE: setCurrentShape(SELECTED_SHAPE, point); if(mOnDrawListener != null) { if(event.getAction() == MotionEvent.ACTION_MOVE) { mOnDrawListener.onDrawShapeTemp(mCurrentShape, mCurrentPaint); } else { mOnDrawListener.onDrawShape(mCurrentShape, mCurrentPaint); } } break; } if(event.getAction() == MotionEvent.ACTION_UP) { GRAPHICOBJECTS.add(mCurrentShape.getPath()); mCurrentShape = null; } }
Panel:
private void updateEraseColor(int color) { mDrawHandler.setEraseColor(color); } private void prepareBitmaps() { int a=255; int r=255; int g=255; int b=255; if (mBitmap == null) { tCanvas = getHolder().lockCanvas(); mBitmap = Bitmap.createBitmap(350, 350, Bitmap.Config.ARGB_8888); mCanvas = new Canvas(mBitmap); tmpBitmap = Bitmap.createBitmap(350,350, Bitmap.Config.ARGB_8888); tmpCanvas = new Canvas(tmpBitmap); //tCanvas.getWidth(), tCanvas.getHeight() // tmpCanvas.drawColor(farba); tmpCanvas.drawARGB(a,r,g,b); mCanvas.drawARGB(a, r, g, b); // mCanvas.drawColor(farba); getHolder().unlockCanvasAndPost(tCanvas); tCanvas = null; } } public DrawHandler getPainterHandler() { return mDrawHandler; } @Override public boolean onTouchEvent(MotionEvent event) { mDrawHandler.handleTouchEvent(event); return true; } public void drawBitmap(Bitmap btp) { tCanvas = getHolder().lockCanvas(); tCanvas.drawBitmap(btp, 0, 0, null); getHolder().unlockCanvasAndPost(tCanvas); tCanvas = null; } private void updateBitmap(Canvas canvas, Bitmap bitmap, Shape shape, Paint paint) { synchronized (bitmap) { canvas.drawPath(shape.getPath(), paint); drawBitmap(bitmap); } } public void onDrawShape(Shape shape, Paint paint) { prepareBitmaps(); updateBitmap(mCanvas, mBitmap, shape, paint); } public void onDrawShapeTemp(Shape shape, Paint paint) { prepareBitmaps(); synchronized (tmpCanvas) { //float sx = 0, sy = 0; //tmpCanvas.scale( sx,sy); tmpCanvas.drawBitmap(mBitmap,0,0, null); } updateBitmap(tmpCanvas, tmpBitmap, shape, paint); } public void onDrawAll(ArrayList<Path> paths, Paint paint) { // TODO Auto-generated method stub prepareBitmaps(); synchronized (mCanvas) { mCanvas.drawARGB(255, 255, 255, 255); // "pobriši" vse mCanvas.drawARGB(255, 255,255, 255); // "pobriši" vse for(Path path : paths) mCanvas.drawPath(path , paint); } // updateBitmap(tmpCanvas, tmpBitmap,paths, paint); synchronized (mBitmap) { // tmpCanvas.drawPath(paths, paint); drawBitmap(mBitmap); } }
+ še vse metode kot so pixel,hue itd razmišlajm o tem da bi jih naredil na osnovi c-ja ali pa česa drugega, ker so svinsko počasne do 10 sekund na simulatorju na telefonu do 2 sekunde..
-shape
-line
-rectangle
Po večini je to to....
g333kk ::
c00L3r ::
Tu pa žal nimam izkupenj z "real-time" risanjem po panelu. Pri meni je že app toliko drugačem da naprej vem katero sliko moram narisat, kak jo pomajšat/rotirat in če še kaj dodam.
Pa si pogledal različne primere na net-u za risanje po panelu? Sigurno se najde kaj, ki dela hitro.
Pa si pogledal različne primere na net-u za risanje po panelu? Sigurno se najde kaj, ki dela hitro.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Android] pomoč pri postavitvi layoutaOddelek: Programiranje | 2197 (1955) | icurk |
» | [Android] SplošnoOddelek: Programiranje | 1995 (1125) | piki12 |
» | Programiranje problem androidOddelek: Programiranje | 1162 (927) | g333kk |
» | [Android] Aplikacija se zrušiOddelek: Programiranje | 805 (642) | g333kk |
» | android črtaOddelek: Programiranje | 2389 (1660) | g333kk |