Autore Topic: ingrandire l'immagine all'interno dei parametri del layout predefinito.  (Letto 193 volte)

Offline paul78

  • Utente normale
  • ***
  • Post: 357
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Ciao  a tutti!

Ho creato un'app. dove i layout sono tondo e al click del layout carico un'immagine, ma quando l'immagine la ingrandisco, supera i parametri prestabiliti del LinearLayout.

Nel layout scrivo questo:

Codice (Java): [Seleziona]
<LinearLayout android:id="@+id/layout1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"           
            android:background="@drawable/layout_bg"
            android:orientation="vertical" >
           
        <ImageView android:id="@+id/image1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="matrix" />
       
        </LinearLayout>

per zoommare ed muovere l'immagine in java scrivo questo:

Codice (Java): [Seleziona]
image1.setEnabled(true);          
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            image1.setLayoutParams(layoutParams);    
            image1.setOnTouchListener(new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                ImageView view = (ImageView) v;
                                //view.setLayoutParams(layoutParams);
                                System.out.println("matrix=" + savedMatrix.toString());
                                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                                case MotionEvent.ACTION_DOWN:
                                        savedMatrix.set(matrix);
                                        startPoint.set(event.getX(), event.getY());
                                        mode = DRAG;
                                        break;
                                case MotionEvent.ACTION_POINTER_DOWN:
                                        oldDist = spacing(event);
                                        if (oldDist > 10f) {
                                                savedMatrix.set(matrix);
                                                midPoint(midPoint, event);
                                                mode = ZOOM;
                                        }
                                        break;
                                case MotionEvent.ACTION_UP:
                                       
                                case MotionEvent.ACTION_POINTER_UP:
                                        mode = NONE;
                                        break;
                                case MotionEvent.ACTION_MOVE:
                                        if (mode == DRAG) {
                                                matrix.set(savedMatrix);
                                                matrix.postTranslate(event.getX() - startPoint.x, event.getY() - startPoint.y);
                                        } else if (mode == ZOOM) {
                                                float newDist = spacing(event);
                                                if (newDist > 10f) {
                                                        matrix.set(savedMatrix);
                                                        float scale = newDist / oldDist;
                                                        matrix.postScale(scale, scale, midPoint.x, midPoint.y);
                                                }
                                        }
                                break;
                                }  
                               
                                view.setImageMatrix(matrix);
                               
                                return true;
                        }
                        @SuppressLint("FloatMath")
                        private float spacing(MotionEvent event) {
                                float x = event.getX(0) - event.getX(1);
                                float y = event.getY(0) - event.getY(1);
                                return FloatMath.sqrt(x * x + y * y);
                        }
                        private void midPoint(PointF point, MotionEvent event) {
                                float x = event.getX(0) + event.getX(1);
                                float y = event.getY(0) + event.getY(1);
                                point.set(x / 2, y / 2);
                        }
                });

quando carico un immagine e la ingrandisco, l'immagine supera i parametri del layout.

Dove Sbaglio?

Help!
tutti possiamo programmare...basta volerlo!!!