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