Недавно я работаю над программой на android
, у меня есть набор картинок, и я извлекаю из них особенность и рисую на них фигуры в соответствии с их особенностями.И я хочу, чтобы измененное изображение показывалось один за другим, как видео.Я конвертирую каждое изображение в растровое изображение и загружаю его в Canvas
, затем рисую форму на Canvas
.Я использую ImageView
, чтобы показать Canvas
и заставить нить спать 1 с, прежде чем я сделаю еще одну картину.Но после процесса, вид показывает только последнюю картинку.Я хочу знать, почему и как это решить?Приведенный ниже код показывает, что я пытаюсь сделать это, используя самоопределенный View, результат такой же, как ImageView.setImageBitmap, только что показанный последний снимок.
public class MainActivity extends AppCompatActivity {
final String TAG="TEST";
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate: ");
setContentView(new Myview(this));
}
class Myview extends View{
private int width;
private int height;
private Bitmap bitmap;
private Canvas canvasBit;
private Paint paintCircle;
private Paint paintRect;
private Paint paint;
private int bimapWidth;
private int bitmapHeight;
public Myview (Context context) {
super(context);
paintCircle = new Paint();
paintCircle.setColor(Color.YELLOW);
paintCircle.setStyle(Paint.Style.FILL);
paintCircle.setAntiAlias(true);
paintRect = new Paint();
paintRect.setColor(Color.GREEN);
paint = new Paint();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
setMeasuredDimension(width, height);
bitmap = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
canvasBit=new Canvas(bitmap);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
String path="car4/img";
DecimalFormat d=new DecimalFormat("0000");
int count=0;
try {
String[] l= new String[0];
l = getAssets().list(path);
count=l.length;
for(int i=1;i<=5;i++)
{
String file=path+"/"+d.format(i)+".jpg";
InputStream in=getAssets().open(file);
Bitmap bm= BitmapFactory.decodeStream(in);
canvas.drawBitmap(bm,0,0,paint);
canvas.drawCircle(10,10,50,paintCircle);
Thread.sleep(500);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}