как переворачивать кнопки андроида - PullRequest
0 голосов
/ 12 октября 2011

Я хочу сделать пользовательскую кнопку в кнопках расширения Android.Когда я нажму на кнопку, она перевернется на 180 градусов и покажет заднее изображение кнопок.Это означает, что кнопка будет иметь два изображения.При щелчке он меняется с анимацией вращения вдоль оси y.

Любая помощь приветствуетсяСпасибо.

Ответы [ 3 ]

0 голосов
/ 28 февраля 2015

сначала простите за мой бедный En.и после этого ...

ваш макет -> flip.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

<Button
    android:id="@+id/front"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#ff00546c"
    android:clickable="true"
    android:onClick="onButtonClick"/>



<Button
    android:id="@+id/back"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#000"
    android:clickable="true"
    android:onClick="onButtonClick"
    android:visibility="gone"/>


</RelativeLayout>

вы определяете свою первую и вторую сторону кнопки или любого вида, который вы слышите.

добавьте эту часть в свою деятельность

public void onButtonClick(View view)
{
    flipView();
}

private void flipView()
{
    View rootLayout = findViewById(R.id.root);
    View viewFace = findViewById(R.id.front);
    View viewBack = findViewById(R.id.back);

    FlipAnimation flipAnimation = new FlipAnimation(viewFace , viewBack );

    if (viewFace.getVisibility() == View.GONE)
    {
        flipAnimation.reverse();
    }
    rootLayout.startAnimation(flipAnimation);
}

эта часть кода запускает анимацию сальто, а последняя часть ...

FlipAnimation.java

public class FlipAnimation extends Animation {
private Camera camera;

private View fromView;
private View toView;

private float centerX;
private float centerY;

private boolean forward = true;

public FlipAnimation(View fromView, View toView) {
    this.fromView = fromView;
    this.toView = toView;

    setDuration(700);
    setFillAfter(false);
    setInterpolator(new AccelerateDecelerateInterpolator());
}

public void reverse() {
    forward = false;
    View switchView = toView;
    toView = fromView;
    fromView = switchView;
}

@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
    super.initialize(width, height, parentWidth, parentHeight);
    centerX = width / 2;
    centerY = height / 2;
    camera = new Camera();
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
    final double radians = Math.PI * interpolatedTime;
    float degrees = (float) (180.0 * radians / Math.PI);

    if (interpolatedTime >= 0.5f) {
        degrees -= 180.f;
        fromView.setVisibility(View.GONE);
        toView.setVisibility(View.VISIBLE);
    }

    if (forward)
        degrees = -degrees; //determines direction of rotation when flip begins

    final Matrix matrix = t.getMatrix();
    camera.save();
    camera.translate(0, 0, Math.abs(degrees)*2);
    camera.getMatrix(matrix);
    camera.rotateY(degrees);
    camera.getMatrix(matrix);
    camera.restore();
    matrix.preTranslate(-centerX, -centerY);
matrix.postTranslate(centerX, centerY);

}
}

наслаждайтесь!

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

0 голосов
/ 28 февраля 2015

https://github.com/stormzhang/FlipLayout - используйте эту библиотеку.Его легко использовать и для вас.

0 голосов
/ 12 октября 2011

Я бы использовал ScaleAnimation, который растянет кнопку до ширины 0 пикселей, а затем растянет ее до 100%.Когда кнопка имеет минимальную ширину, фон и текст должны быть изменены, чтобы показать обратную сторону.

...