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