Мне нужно начать работу с двумя круговыми растровыми изображениями в центре, которые должны мгновенно анимироваться и слегка перемещаться в сторону, чтобы часть одного растрового изображения была вне экрана и не видна. Позже, когда пользователь покидает активность, он должен анимироваться таким же образом, но назад (перемещаться из стороны в центр).Android: создание видимого растрового изображения при перемещении
Итак, я реализовал класс, который рисует эти растровые изображения в их основном местоположении (сбоку), и проблема, которую я имею прямо сейчас, заключается в том, что когда я имитирую их, внеэкранная часть растрового изображения никогда не отображается, поэтому на моем экране я вижу уродливое движущееся растровое изображение, в котором отсутствует кусок.
Это, как растровые изображения нарисованы:
public class MyImageView extends ImageView {
private Canvas offscreen;
private static Bitmap pattern;
private static Bitmap logo;
private static int screenWidth, screenHeight; //The real size of the screen
private static int patternDiameter, logoDiameter; //bitmaps' dimensions, both images are circles
private static float topPatternMargin, leftPatternMargin;
private static float topLogoMargin, leftLogoMargin;
public MyImageView (Context context, AttributeSet attrs) {
super(context, attrs);
screenWidth = getSize(context)[0];
screenHeight = getSize(context)[1];
patternDiameter = (int)(screenWidth * (1005.0/1280.0));
logoDiameter = (int)(patternDiameter * (230.0/502.5));
pattern = BitmapFactory.decodeResource(context.getResources(), R.drawable.start_pattern);
pattern = Bitmap.createScaledBitmap(pattern, patternDiameter, patternDiameter, false);
logo = BitmapFactory.decodeResource(context.getResources(), R.drawable.start_logo);
logo = Bitmap.createScaledBitmap(logo, logoDiameter, logoDiameter, false);
leftPatternMargin = (float) ((screenWidth) * (430.0/1280.0) - (patternDiameter/2.0));
topPatternMargin = (float) ((screenHeight - patternDiameter)/2.0);
leftLogoMargin = (float) (leftPatternMargin + patternDiameter/2.0 - logoDiameter/2.0);
topLogoMargin = (float)(topPatternMargin + patternDiameter/2.0 - logoDiameter/2.0);
offscreen = new Canvas(pattern);
}
@Override
protected void onDraw(Canvas canvas) {
if(canvas==offscreen)
super.onDraw(offscreen);
else {
super.draw(offscreen);
canvas.drawBitmap(pattern, leftPatternMargin, topPatternMargin, null);
canvas.drawBitmap(logo, leftLogoMargin, topLogoMargin, null);
}
}
}
Так что мой вопрос, как бы я изменить этот код (или, может быть, какой-то другой код), так что, когда я делаю экземпляр этого класса двигаться вокруг, все его части видны пользователю?
да я автор этого ответа. Пожалуйста, если вы делаете это для анимации, НЕ устанавливайте его на макет. Установите его перед началом анимации и удалите его, когда закончите анимацию. (по коду) –
PS: альтернативой этому является использование ViewOverlay и перемещение вашего вида (временного) в оверлей для анимации и обратно в контейнер, когда вы закончите. Это имеет смысл специально для анимации представления, которое меняет родительский контейнер. Если вы используете ViewOverlay из самого верхнего родительского представления, которое позволяет вам показывать анимацию без обрезки. –