AndroidStudio DaveMorrissey's SubsamplingScaleImageView с изображением в формате gif

Я использую эту замечательную библиотеку для обработки карты в моем приложении для Android. Я делаю пользовательское представление с именем MapView, которое расширяет SubsamplingScaleImageView. Я пытаюсь использовать базовое расширение PinView библиотеки, чтобы установить Pin поверх карты, но я не хочу статичное изображение Pin, а динамический gif. Я читал о трех сценариях использования "Кино", использования GifDecoder и WebView, но ни один из них не помог мне. Я действительно не могу понять, как анимировать мой PIN-код на карте. Помоги мне, пожалуйста!

public class MapView extends SubsamplingScaleImageView{

    private PointF sPin;
    private Bitmap pin;


    public MapView(Context context) {
        this(context, null);
    }

    public MapView(Context context, AttributeSet attr) {
        super(context, attr);
        initialise();
    }

    private void initialise() {
         float density = getResources().getDisplayMetrics().densityDpi;
        pin = BitmapFactory.decodeResource(this.getResources(), R.drawable.pushpin_blue.gif); //<<<<<<<Here goes the GIF
        float w = (density/420f) * pin.getWidth();
        float h = (density/420f) * pin.getHeight();
        pin = Bitmap.createScaledBitmap(pin, (int)w, (int)h, true);
    }


    public PointF getPin() {
        return sPin;
    }

    public void setPin(PointF sPin) {
        this.sPin = sPin;
        initialise();
        invalidate();
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (!isReady()) {
            return;
        }

        if (sPin != null && pin != null) {
            Paint paint = new Paint();
            paint.setAntiAlias(true);
            PointF vPin = sourceToViewCoord(sPin);
            float vX = vPin.x - (pin.getWidth()/2);
            float vY = vPin.y - pin.getHeight();
            canvas.drawBitmap(pin, vX, vY, paint);
        }

    }

}

0 ответов

Другие вопросы по тегам