Autore Topic: drawview e rotazione schermo  (Letto 327 volte)

Offline maverik1408

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
drawview e rotazione schermo
« il: 20 Gennaio 2014, 22:20:05 CET »
0
ciao a tutti
Ho provato a disegnare su un canvas e fino a qui tutto ok!!
Alll'onDraw prendo la lista dei punti e disegno la path

Canvas.drawpath(point, paint)

Solo che quando ruoto lo schermo i punti vengono ridisegnati ma non nello stessa posizione


Cosa puo essere????

Grazie
Maverik @ Google Play Store

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:drawview e rotazione schermo
« Risposta #1 il: 21 Gennaio 2014, 08:23:48 CET »
0
Può dipendere da come li ridisegni.
Posta le righe di codice.

Offline maverik1408

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
Re:drawview e rotazione schermo
« Risposta #2 il: 21 Gennaio 2014, 08:51:52 CET »
0
ecco il codice!!!
io credo che il problema sta nelle coordinate dei punti che una volta ruotato lo schermo vanno riadattate credo!!

Codice (Java): [Seleziona]
public DrawingView(Context context, AttributeSet attr) {
                super(context);
                setFocusable(true);
                setFocusableInTouchMode(true);
               
                setBackgroundColor(Color.WHITE);
               
                this.setOnTouchListener(this);

                onCanvasInitialization();
               
                ////ROTAZIONE
        }

        public void onCanvasInitialization() {
               
                m_Bitmap_Paint = new Paint(Paint.DITHER_FLAG);
               
                m_Paint = new Paint();
                m_Paint.setAntiAlias(true);
                m_Paint.setDither(true);
                m_Paint.setColor(Color.parseColor("#000000"));
                m_Paint.setStyle(Paint.Style.STROKE);
                m_Paint.setStrokeJoin(Paint.Join.ROUND);
                m_Paint.setStrokeCap(Paint.Cap.ROUND);
                m_Paint.setStrokeWidth(2);

                m_Canvas = new Canvas();
               

                m_Path = new Path();
                Paint newPaint = new Paint(m_Paint);
                paths.add(new Pair<Path, Paint>(m_Path, newPaint));
 
        }

        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
                super.onSizeChanged(w, h, oldw, oldh);
               
                m_Bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        m_Canvas = new Canvas(m_Bitmap);
    }

        public boolean onTouch(View arg0, MotionEvent event) {
                float x = event.getX();
                float y = event.getY();

                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                        start(x, y);
                        invalidate();
                        break;
                case MotionEvent.ACTION_MOVE:
                        move(x, y);
                        invalidate();
                        break;
                case MotionEvent.ACTION_UP:
                        end();
                        invalidate();
                        break;
                }
                return true;
        }

        @Override
        protected void onDraw(Canvas canvas) {
                canvas.save();
               
                canvas.drawBitmap(m_Bitmap, 0, 0, m_Bitmap_Paint);
                for (Pair<Path, Paint> p : paths) {
                       
                        canvas.drawPath(p.first, p.second);
                }
                canvas.restore();
        }

        public Bitmap getBitmap()
    {
        this.setDrawingCacheEnabled(true);  
        this.buildDrawingCache();
        Bitmap bmp = Bitmap.createBitmap(this.getDrawingCache());  
        this.setDrawingCacheEnabled(false);
        return bmp;
    }
       
        private void start(float x, float y) {
               
                if (isEraserActive) {
                        m_Paint.setColor(Color.WHITE);
                        m_Paint.setStrokeWidth(m_Eraser_Dimension);
                        Paint newPaint = new Paint(m_Paint);
                        paths.add(new Pair<Path, Paint>(m_Path, newPaint));
                         
                } else {
                        m_Paint.setColor(m_Color);
                        m_Paint.setStrokeWidth(m_Dimension);
                        Paint newPaint = new Paint(m_Paint);
                        paths.add(new Pair<Path, Paint>(m_Path, newPaint));
                         
                }
               
               
                m_Path.reset();
                m_Path.moveTo(x, y);
                mX = x;
                mY = y;
        }

        private void move(float x, float y) {
                float dx = Math.abs(x - mX);
                float dy = Math.abs(y - mY);
                if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
                        m_Path.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
                        mX = x;
                        mY = y;
                }
        }

        private void end() {
                m_Path.lineTo(mX, mY);

                m_Canvas.drawPath(m_Path, m_Paint);

                m_Path = new Path();
                Paint newPaint = new Paint(m_Paint); // Clones the mPaint object
                paths.add(new Pair<Path, Paint>(m_Path, newPaint));
        }
Maverik @ Google Play Store