public class MainActivity extends Activity { RelativeLayout mainLayout; ImageView imageView; Bitmap bitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainLayout=(RelativeLayout)findViewById(R.id.mainLayout); bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.anguria); ImageView imageView=new ImageView(this); imageView.setImageBitmap(bitmap); imageView.setBackgroundColor(Color.BLACK); imageView.setScaleType(ScaleType.MATRIX); mainLayout.addView(imageView); imageView.setX(200); imageView.setY(10); imageView.getLayoutParams().width=200; imageView.getLayoutParams().height=200; 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); /*se la direzione è da destra a sinistra il punto d'arresto * è a bitmap.getWidth-200. Per valori inferiori la * translazione è normale, per valori uguali la translazione * è zero, per valori superiori torna al valore massimo */ Log.d(pts[0]+"",""+(bitmap.getWidth()-200)); if(currentX<X){ if(pts[0]<(bitmap.getWidth()-200)){ deltaX=-pts[0]+currentX-X; } else{ if(pts[0]>(bitmap.getWidth()-200)) deltaX=-(bitmap.getWidth()-200); } } if(currentX>X){ if(pts[0]>0){ deltaX=-pts[0]+currentX-X; } else{ if(pts[0]<0) deltaX=0; } } if(currentY<Y){ if(pts[1]<(bitmap.getHeight()-200)){ deltaY=-pts[1]+currentY-Y; } else{ if(pts[1]>(bitmap.getHeight()-200)) deltaY=-(bitmap.getHeight()-200); } } if(currentY>Y){ if(pts[1]>0){ deltaY=-pts[1]+currentY-Y; } else{ if(pts[1]<0) deltaY=0; } } matrix.setTranslate(deltaX,deltaY); ((ImageView)v).setImageMatrix(matrix); X=currentX; Y=currentY; } return true; } }; imageView.setOnTouchListener(onTouchListener); } }Sembra perfetto.
Miei appunti liberi, senza pretesa di dire necessariamente sempre cose giuste o sensate, durante l'apprendimento e la pratica della programmazione
JavascriptProva
domenica 1 maggio 2016
Codice perfezionato per il trascinamento di una bitmap attraverso una ImageVIew.
Ecco il codice perfezionato, per il trascinamento di unìimmagine attraverso una ImageView più piccola.
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento