2016-07-16 3 views
0

камера активность приложений, используя SurfaceView и растровое изображение рисуется (белых прямоугольниками) с использованием canvas.drawBitMap() метода внутрь по OnDraw() метода SurfaceView. я использовал следующий код для достижения этой цели:андроид холст drawBitMap и переключаться между изображениями на некотором интервале

canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_left), x1, y1, null); 
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_right), x2, y1, null); 
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_left), x1, y2, null); 
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_right), x2, y2, null); 

Скриншот:

enter image description here

Но я хочу эффект анимации при переключении между 2 растровыми изображениями, которые должны выглядеть примерно, как показано ниже:

enter image description here

Я попытался найти несколько решений (даже в stackoverflow) но нашел только длительный и дорогостоящий. Пожалуйста, предложите некоторый чистый и менее дорогостоящий подход.

Все это я делаю внутри поверхности с использованием холста.

ответ

0

Я сделал это, вызвав postInvalidateDelayed в onDraw() вид с поверхности.

postInvalidateDelayed(500, left,top,right,bottom); 

Это, как оно работает, OnDraw() метод вызывается каждые 500 милли секунд, что время изменения битовой карты (красный, если это белый и белый, если это красный). Изменение между изображением может быть выполнено с использованием простого флага.

if(rectBlink){ 
      canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_left_white), x1, y1, null); 
      canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_right_white), x2, y1, null); 
      canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_left_white), x1, y2, null); 
      canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_right_white), x2, y2, null); 
     } 
     else{ 
      canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_left_red), x1, y1, null); 
      canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_top_right_red), x2, y1, null); 
      canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_left_red), x1, y2, null); 
      canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.corner_bottom_right_red), x2, y2, null); 
     } 

А затем изменить форму статуса флага истинной ложь или ложную к истинному, используя код ниже:

rectBlink=!rectBlink; 

Это все сделано.

Смежные вопросы