Привет!
Я хочу сделать приложение, которое бы отображало определенные значения, как Вольтметр/Амперметр/Спидометр - т.е. чтобы стрелка ходила по шкале при изменении значения.
Я решил, что буду использовать ImageView и рисовать на canvas линии.
Но когда я делаю отрисовку на canvas, после этого myImageView.invalidate();
На дисплее отображается только стрелка в последней позиции, нет плавного перемещения/отрисовки стрелки.
public class TesteRotateActivity extends Activity implements SensorEventListener {
private MyImageView myImageView;
private SensorManager mSensorManager;
private int widthIV=120,heightIV=100;
private Sensor sensor;
private Bitmap bitmap = Bitmap.createBitmap(widthIV,heightIV,Bitmap.Config.ARGB_8888);
private Bitmap b2=Bitmap.createBitmap(widthIV,heightIV,Bitmap.Config.ARGB_8888);
private int m,a=(int)widthIV/2,b=(int)heightIV/2;
private Canvas canvas;
private TextView t;
private Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
private double prev = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
myImageView = (MyImageView) findViewById(R.id.imageview);
t = (TextView)findViewById(R.id.textview);
ImageView i2 = (ImageView)findViewById(R.id.i2);
Button b = (Button)findViewById(R.id.button1);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
globalDraw(50);
}
});
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
}
protected void onResume(){
super.onResume();
mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
protected void onPause(){
super.onPause();
mSensorManager.unregisterListener(this);
}
private void drawArraw(double t){
bitmap=b2.copy(Bitmap.Config.ARGB_8888, true);
canvas = new Canvas(bitmap);
p.setColor(Color.DKGRAY);
p.setStrokeWidth(2f);
myImageView.setImageBitmap(bitmap);
int x=(int) (a*Math.cos(t))+a;
int y=(int) (b*Math.sin(t))+b;
canvas.drawLine(a,b,x, y, p);
myImageView.setImageDrawable(new BitmapDrawable(getResources(),bitmap));
myImageView.invalidate();
}
public void globalDraw(double valueOfMeter){
Integer in = (new Double(valueOfMeter)).intValue();
m=1;
for(int k =0;k<in.toString().toCharArray().length-2;k++)
m*=10;
double diff = prev-valueOfMeter;
if(diff<0)
for(double i=diff;i<=0;i++){
double value = (valueOfMeter+i)/m*1.8+180;
value=value*Math.PI/180;
drawArraw(value);
}
else
for(double i=0;i<diff;i++){
double value = (prev-i)/m*1.8+180;
value=value*Math.PI/180;
drawArraw(value);
}
}
}
Как мне отображать динамично изменения ImageView или какой инструмент использовать для достижения той же цели.