Questo è il codice che ho preso da uno dei miei progetti-laboratorio:
public class MainActivity extends Activity {
float[] pts;
RelativeLayout mainLayout;
ImageView imageView;
ImageView imgControllo;
Bitmap bitmap;
float X, Y;
float currentX, currentY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);
final ImageView imageView=new ImageView(this);
imageView.setScaleType(ScaleType.MATRIX);
bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.verticalimagetest);
LayoutParams params=new LayoutParams(300,300);
imageView.setLayoutParams(params);
imageView.setImageBitmap(bitmap);
imageView.setBackgroundColor(Color.GREEN);
mainLayout.addView(imageView);
final ImageView imgControllo=new ImageView(this);
imgControllo.setScaleType(ScaleType.FIT_CENTER);
bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.verticalimagetest);
LayoutParams params2=new LayoutParams(100,200);
params2.leftMargin=500;
params2.topMargin=100;
imgControllo.setLayoutParams(params2);
imgControllo.setBackgroundColor(Color.BLACK);
mainLayout.addView(imgControllo);
Button button=new Button(this);
LayoutParams bttParams=new LayoutParams(150,50);
bttParams.leftMargin=300;
bttParams.topMargin=100;
button.setLayoutParams(bttParams);
button.setText("Crea");
mainLayout.addView(button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageView.destroyDrawingCache();
imageView.buildDrawingCache();
Bitmap bmp=imageView.getDrawingCache();
imgControllo.setImageBitmap(bmp);
}
});
OnTouchListener onTouchListener=new View.OnTouchListener() {
Matrix matrice=new Matrix();
Matrix inversa=new Matrix();
@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();
pts=new float[]{0,0};
imageView.getImageMatrix().invert(inversa);
inversa.mapPoints(pts);
matrice.setTranslate(-pts[0]+currentX-X, -pts[1]+currentY-Y);
imageView.setImageMatrix(matrice);
X=currentX;
Y=currentY;
imageView.destroyDrawingCache();
imageView.buildDrawingCache();
Bitmap bmp=imageView.getDrawingCache();
imgControllo.setImageBitmap(bmp);
break;
}
return true;
}
};
imageView.setOnTouchListener(onTouchListener);
}
}
Questo è basato sulle matrici, ossia la traslazione di un'immagine avviene per mezzo di una Matrix.Ma si può fare anche in modo diverso...
Nessun commento:
Posta un commento