Autore Topic: Problema con la selezione di più immagini...  (Letto 321 volte)

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Problema con la selezione di più immagini...
« il: 10 Luglio 2015, 09:05:58 CEST »
0
Ciao a tutti!

stò creando una app di prova dove dovrei caricare 2 immagini ed inserirle uno a destra e uno a sinistra.

per dividere affiancare le immagini, nel layout ho scritto questo:

Codice (Java): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/layout_image" >

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" >
           
            <LinearLayout android:id="@+id/linear1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="vertical"
                    android:onClick="onOpenImage1" >
                   
                    <ImageView android:id="@+id/image1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:scaleType="matrix"/>
                </LinearLayout>
               
            <LinearLayout android:id="@+id/linear2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:orientation="vertical"
                    android:onClick="onOpenImage2" >
                   
                    <ImageView android:id="@+id/image2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:scaleType="matrix" />
                </LinearLayout>
               
    </LinearLayout>
   
   
</RelativeLayout>

mentre per la selezione dell'immagine destra e sinistra ho scritto questo:

Codice (Java): [Seleziona]
public class MainActivity extends Activity {

        Matrix matrix = new Matrix();
        Matrix savedMatrix = new Matrix();
        PointF startPoint = new PointF();
        PointF midPoint = new PointF();
        float oldDist = 1f;
        static final int NONE = 0;
        static final int DRAG = 1;
        static final int ZOOM = 2;
        int mode = NONE;
       
        LinearLayout layout_image;
        RelativeLayout relativeView;
        private android.widget.RelativeLayout.LayoutParams layoutParams;
       
        public static final String CROPPED_IMAGE_FILEPATH = "/sdcard/temporary_file.png";
   
    ImageView image, image2;
   
    private static int RESULT_LOAD_IMAGE1 = 1;
    private static int RESULT_LOAD_IMAGE2 = 1;
   
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onOpenImage1(View view) {              
        Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);    
        startActivityForResult(i, RESULT_LOAD_IMAGE1);
    }

   
    public void onOpenImage2(View view) {              
        Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);    
        startActivityForResult(i, RESULT_LOAD_IMAGE2);
    }
   
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
       
        if (requestCode == RESULT_LOAD_IMAGE1 && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
 
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
             
            image = (ImageView) findViewById(R.id.image1);
            image.setImageBitmap(BitmapFactory.decodeFile(picturePath));
            image.setEnabled(true);
            image.setOnTouchListener(new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                ImageView view = (ImageView) v;
                                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);
                        }
                });
        }
        if (requestCode == RESULT_LOAD_IMAGE2 && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
 
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
             
            image2 = (ImageView) findViewById(R.id.image2);
            image2.setImageBitmap(BitmapFactory.decodeFile(picturePath));
            image2.setEnabled(true);
            image2.setOnTouchListener(new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                ImageView view = (ImageView) v;
                                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);
                        }
                });
        }
                   
    }
           
}

il problema è che quando clicco sul lato destro, mi va a caricare la stessa immagine su tutte e due i lati! la stessa cosa se clicco anche sul lato sinistro!

il mio obbiettivo è quello di caricare l'immagine solo sul lato che ho cliccato!

help! please!

tutti possiamo programmare...basta volerlo!!!