Ich denke, dass ein besserer Ansatz darin bestehen würde, eine benutzerdefinierte ImageView zu erstellen und die onDraw-Methode zu überschreiben. Etwas wie:
public class CustomView extends ImageView {
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrst) {
super(context, attrst);
}
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
MyBitmapFactory bitMapFac = null;
public void setBitmapFactory(MyBitmapFactory bitMapFac)
{
this.bitMapFac = bitMapFac;
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
/*instantiate a bitmap and draw stuff here, it could well be another
class which you systematically update via a different thread so that you can get a fresh updated
bitmap from, that you desire to be updated onto the custom ImageView.
That will happen everytime onDraw has received a call i.e. something like:*/
Bitmap myBitmap = bitMapFac.update(); //where update returns the most up to date Bitmap
//here you set the rectangles in which you want to draw the bitmap and pass the bitmap
canvas.drawBitmap(myBitMap, new Rect(0,0,400,400), new Rect(0,0,240,135) , null);
super.onDraw(canvas);
//you need to call postInvalidate so that the system knows that it should redraw your custom ImageView
this.postInvalidate();
}
}
Es wäre eine gute Idee, eine Logik zu implementieren, die überprüft, ob es eine frische Bitmap gibt, die über die update()-Methode abgerufen werden kann, damit der Code innerhalb von onDraw nicht bei jedem Mal ausgeführt wird und das System belastet.
Und dann verwenden Sie Ihre benutzerdefinierte Ansicht, wo immer Sie sie brauchen. Der einfachste Weg wäre, sie direkt innerhalb der activity_layout.xml zu deklarieren, wie folgt:
Und dann greifen Sie darauf in Ihrem Code wie auf eine andere Ansicht zu, indem Sie verwenden:
customView = (CustomView) findViewById(R.id.customView);