public class MainActivity extends Activity { float scale=1f; ScaleGestureDetector SGD; RelativeLayout mainLayout; ImageView imageView; Bitmap bitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SGD = new ScaleGestureDetector(this, new ScaleListener()); mainLayout=(RelativeLayout)findViewById(R.id.mainLayout); bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.angurie2); final int larghezza=300; final int altezza=300; ImageView i=newImage(mainLayout,larghezza, altezza, 10, 10, bitmap, Color.BLACK, ScaleType.MATRIX); View.OnTouchListener onTouchListener=new View.OnTouchListener() { Matrix matrix=new Matrix(); Matrix inversa=new Matrix(); float X,Y,currentX, currentY; float deltaX, deltaY; @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN: X=event.getX(); Y=event.getY(); break; case MotionEvent.ACTION_MOVE: currentX=event.getX(); currentY=event.getY(); float[] pts={0,0}; ((ImageView)v).getImageMatrix().invert(inversa); inversa.mapPoints(pts); if(currentX<X){ if((pts[0]-currentX+X)<(bitmap.getWidth()-larghezza/scale)){ deltaX=-pts[0]+currentX-X; } else{ if((pts[0]-currentX+X)>(bitmap.getWidth()-larghezza/scale)) deltaX=-(bitmap.getWidth()-larghezza/scale); } } if(currentX>X){ if((pts[0]-currentX+X)>0){ deltaX=-pts[0]+currentX-X; } else{ if((pts[0]-currentX+X)<0) deltaX=0; } } if(currentY<Y){ if((pts[1]-currentY+Y)<(bitmap.getHeight()-altezza/scale)){ deltaY=-pts[1]+currentY-Y; } else{ if((pts[1]-currentY+Y)>(bitmap.getHeight()-altezza/scale)) deltaY=-(bitmap.getHeight()-altezza/scale); } } if(currentY>Y){ if((pts[1]-currentY+Y)>0){ deltaY=-pts[1]+currentY-Y; } else{ if((pts[1]-currentY+Y)<0) deltaY=0; } } matrix.setTranslate(deltaX,deltaY); matrix.postScale(scale, scale); ((ImageView)v).setImageMatrix(matrix); X=currentX; Y=currentY; SGD.onTouchEvent(event); break; } return true; } }; i.setOnTouchListener(onTouchListener); } class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener{ @Override public boolean onScale(ScaleGestureDetector SGD){ scale *= SGD.getScaleFactor(); return true; } } public ImageView newImage(ViewGroup layout, int larghezza, int altezza, float X, float Y, Bitmap bitmap, int colore, ScaleType scaletype){ ImageView imageView=new ImageView(this); layout.addView(imageView); imageView.getLayoutParams().width=larghezza; imageView.getLayoutParams().height=altezza; imageView.setX(X); imageView.setY(Y); imageView.setImageBitmap(bitmap); imageView.setBackgroundColor(colore); imageView.setScaleType(scaletype); return imageView; } }Ora devo provvedere a metterlo nell'applicazione...
Dopo averla opportunamente SALVATA!!!
Il codice per prendere l'immagine devo andare a ripescarmelo...
Eccolo:
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { imageView.destroyDrawingCache(); imageView.buildDrawingCache(); Bitmap bmp=imageView.getDrawingCache(); imgControllo.setImageBitmap(bmp); } });
Nessun commento:
Posta un commento