在每个图像上绘制特定形状并逐个显示

时间:2018-05-21 15:52:48

标签: android canvas view imageview computer-vision

最近我正在研究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();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

感谢@Deepak kaku,我找到了通过评论中的链接解决问题的方法。 如果我使用主线程更新UI,程序将延迟并且绘制过程将停止,并且在下一个循环中,构造的位图将被销毁并且将构造另一个位图,因此ImageView只能显示最后的图片。 我通过打开anther线程来解决问题以更新UI 我附上以下代码:

No viable overloaded '='

}