Salve a tutti!
Sto facendo un pò di prove con i drawable e in particolare con RotateDrawable e ScaleDrawable..
Ho creato un piccolo programma che ha due Button (scale e rotate) che dovrebbero servire rispettivamente a ridimensionare e ruotare l'immagine di sfondo contenuta da LinearLayout.
Prima ho provato ad implementare singolarmente i due listener e funziona...
Se invece provo a gestire entrambe le azioni, ovviamente in relazione al Button premuto, funziona solo uno dei due (nel mio caso ruota).
Ecco il codice:
codice:
package it.apogeo.android.cap03.rotatedrawable;
import android.app.Activity;
import android.graphics.drawable.ScaleDrawable;
import android.graphics.drawable.RotateDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
public class RotateDrawableActivity extends Activity {
private final static int MIN_LEVEL = 0;
private final static int MAX_LEVEL = 10000;
private final static int STEP = 200;
private int levelR=0, levelS = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Otteniamo il riferimento a RotateDrawable e ScaleDrawable
final ScaleDrawable scaleDrawable = (ScaleDrawable) getResources()
.getDrawable(R.drawable.scale);
final RotateDrawable rotateDrawable =(RotateDrawable) getResources().getDrawable(R.drawable.rotate);
// Riferimento ai bottoni
Button scala = (Button) findViewById(R.id.buttonS);
Button ruota = (Button) findViewById(R.id.buttonR);
// Riferimento al LinearLayout contenitore delle View
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.linearLayout);
// Impostiamo lo ScaleDrawable come Background della View
linearLayout.setBackgroundDrawable(scaleDrawable);
linearLayout.setBackgroundDrawable(rotateDrawable);
//scala
scala.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
levelS += STEP;
if (levelS > MAX_LEVEL) {
levelS = MAX_LEVEL;
} else if (levelR < MIN_LEVEL) {
levelS = MIN_LEVEL;
}
Log.i("RotateScaleDrawableTestActivity", "Level: " + levelS);
scaleDrawable.setLevel(levelS);
}
});
// Gestiamo gli eventi di pressione del button ruota
ruota.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
levelR += STEP;
if (levelR > MAX_LEVEL) {
levelR = MAX_LEVEL;
} else if (levelR < MIN_LEVEL) {
levelR = MIN_LEVEL;
}
Log.i("Rotate", "Level: " + levelR);
rotateDrawable.setLevel(levelR);
}
});
}
}
Credo proprio che il problema sia legato alla parte in grassetto perchè posso applicare solo un drawable alla volta, e quindi in questo caso viene preso rotateDrawable che è l'ultimo.
Come posso gestire questa situazione?