android создать google plus как изображение профиля

Здравствуйте, я хотел бы создать круглое изображение с небольшой рамкой и внутри загрузить изображение профиля пользователя, как это делает приложение Google Plus для Android. Проблема в том, что мне нужно установить это изображение как нарисованную верхнюю часть кнопки, поэтому я нашел этот код:

public BitmapDrawable putOverlay(Bitmap bitmap, Bitmap overlay) {
    Canvas canvas = new Canvas(bitmap);
    Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
    canvas.drawBitmap(overlay, 0, 0, paint);
    return new BitmapDrawable(bitmap);
} 

Ведьма должна накладывать одно растровое изображение (изображение пользователя) на другое растровое изображение (овальной формы), но считается, что а) круглое растровое изображение находится над изображением профиля пользователя и б) изображение профиля пользователя слишком велико. Любые предложения о том, как это сделать или если я, по крайней мере, на правильном пути, очень ценятся.

ОБНОВИТЬ

Мне удалось показать два изображения, используя этот код:

public BitmapDrawable putOverlay(Bitmap bitmap, Bitmap overlay) {
    int width = overlay.getWidth()-50;
    int height = overlay.getHeight()-50;

    Bitmap b = Bitmap.createScaledBitmap(bitmap, width, height,true);
    Canvas canvas = new Canvas(overlay);
    canvas.save();
    canvas.translate(width,height);
    Matrix matrix = new Matrix();
    canvas.drawBitmap(overlay, matrix, null); 
    canvas.restore();
    canvas.drawBitmap(b,matrix, null);
    BitmapDrawable completeImage = new BitmapDrawable(getResources(),overlay);
    return completeImage;
}  

проблема в том, что изображение профиля не выровнено по круглому изображению. Это похоже на то, что изображение профиля рисуется из той же позиции x, y, что и круглое изображение. Также обратите внимание, что изображение профиля загружается с помощью:

bitmap = BitmapFactory.decodeStream((InputStream) new URL(imagepath).getContent());

person maxsap    schedule 11.04.2012    source источник
comment
Вы когда-нибудь догадывались об этом?   -  person Noah Huppert    schedule 19.04.2014


Ответы (1)


Используйте этот код (сначала масштабирует изображение профиля, затем применяет наложение)

public BitmapDrawable putOverlay(Bitmap bitmap, Bitmap overlay) {
    Bitmap b = Bitmap.createScaledBitmap(bitmap, overlay.getWidth(), overlay.getHeight(),true);
    Canvas canvas = new Canvas(b);
    Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
    canvas.drawBitmap(overlay, 0, 0, paint);
    return new BitmapDrawable(b);
} 

Я не совсем понял, что вы имели в виду в проблеме а, что оверлей находится поверх изображения профиля.

person saarraz1    schedule 11.04.2012
comment
нет, это не сработало, я имею в виду, что я хотел бы создать изображение, подобное приложению Google Plus для Android, которое должно отображать профиль пользователя на главной панели инструментов. Для этого я читаю изображение, которое представляет собой простой белый круг, а затем пытаюсь наложить фактическое изображение из профиля пользователя. Вместо того, чтобы показывать изображение профиля из белого круга, происходит обратное. - person maxsap; 13.04.2012
comment
вы можете просто передать оверлейное изображение, представляющее собой белый квадрат с вырезанным из него кругом в центре, таким образом приведенный выше код произведет желаемый эффект. - person saarraz1; 13.04.2012