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