Масштабирование выбранного элемента в Галерее - PullRequest
1 голос
/ 27 апреля 2011

Знаете ли вы, как я могу масштабировать выбранный элемент в Галерее? Я знаю, что, очевидно, getScale () и getAlpha () были удалены из 0.9 SDK. Так, как я мог достигнуть того же самого эффекта?

Спасибо

Ответы [ 2 ]

3 голосов
/ 11 августа 2012

Возможно, уже слишком поздно, чтобы ответить, но я нашел этот вопрос, когда искал что-то еще.

Я сделал это, имея собственную галерею и переопределив getChildStaticTransformation () и добавив некоторые другие вещи.

Вот пример

private int centerOfGallery;

public CustomGallery(Context context) {
    super(context);
    init();
}

public CustomGallery(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public CustomGallery(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}

private void init() {
    setStaticTransformationsEnabled(true);
}

private int getCenterWidthOfView(View child) {
    return child.getLeft() + child.getWidth() / 2;
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    centerOfGallery = (w - getPaddingLeft() - getPaddingRight()) / 2 + getPaddingLeft();
}

@Override
protected boolean getChildStaticTransformation(View child, Transformation t) {
    mCamera.save();
    final Matrix matrix = t.getMatrix();
    final int centerWidthOfChild = getCenterWidthOfView(child);
    final int delta = centerOfGallery - centerWidthOfChild;

    final float scale = (float)(maxScale - Math.abs(delta) * 0.5f / centerOfGallery);
    mCamera.getMatrix(matrix);
    matrix.preScale(scale, scale);
    matrix.preTranslate(-1, -1);
    matrix.postTranslate(1, 1);
    mCamera.restore();

    if (version >= 15) { // For Jelly Bean hack
        child.invalidate();
    }

    return true;
}

, где maxScale - максимальный масштаб, который вы хотите для выбранного элемента (например, 1,5f)

После этого, будьте осторожны с расстоянием между элементами в галерее, когдамасштабировать их.При необходимости вы можете использовать setSpacing ().

Надеюсь, это поможет

Seb

0 голосов
/ 27 апреля 2011
...