旋转后,Android Imagebutton被截止

时间:2014-07-25 10:19:22

标签: android android-layout android-custom-view

我想创建一个自定义ViewGroup,其中包含围绕一个圆形按钮旋转的一些ImageButtons。

enter image description here

添加到我的视图组的每个环境ImageButton都具有相同的布局位置,位于视图组的顶部和水平中心。之后,我将以特定角度旋转它们,目标是围绕中心按钮创建一个环:

public class CustomeView extends ViewGroup {
private List<ArcButton> mArcButtons = new ArrayList<ArcButton>();

protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    // ...
    mArcBtnBound = new RectF(0, 0, (mInnerRadius + mThickness), mThickness);
    mArcBtnBound.offsetTo(
            getPaddingLeft() + (mInnerRadius + mThickness) / 2,
            getPaddingTop());

    for(ArcButton arcBtn: mArcButtons) {
        arcBtn.layout(
                (int)mArcBtnBound.left,
                (int)mArcBtnBound.top,
                (int)mArcBtnBound.right,
                (int)mArcBtnBound.bottom);
    }
}
}

mInnerRadius是圆心半径按钮,mThickness是视图组中环境按钮的高度。添加环境ImageButton:

ArcButton btn = new ArcButton(getContext());
btn.setBackgroundResource(bkgResId);
btn.setImageResource(R.drawable.ic_launcher);
addView(btn);
btn.rotateTo(10, (mThickness + mInnerRadius) / 2, (mThickness + mInnerRadius));

我是draw()类的重新实现ImageButton方法,用于将图像视图与背景一起旋转,并提供公共方法rotateTo

public class ArcButton extends ImageButton {
private float mRotation;
private PointF mPivot;

@Override
public void draw(Canvas canvas) {
    canvas.save();
    canvas.rotate(mRotation, mPivot.x, mPivot.y);
    super.draw(canvas);
    canvas.restore();
}

public void rotateTo(float rotation, float pivotX, float pivotY) {
    mPivot.x = pivotX;
    mPivot.y = pivotY;
    mRotation = rotation;

    if (Build.VERSION.SDK_INT >= 11) {
        this.setPivotX(pivotX);
        this.setPivotY(pivotY);
        this.setRotation(rotation);
    } else {
        draw(new Canvas());
    }
}
}

正如您可以看到上面的屏幕截图,问题是我的Imagebutton被截止了。我尝试使用RotateAnimation,它使旋转的按钮没有被切断,但也没有接收到触摸事件。测试的Android版本是2.2。你能帮我解决这个问题吗?

有效旋转环境按钮的任何其他建议都非常受欢迎。非常感谢你!

0 个答案:

没有答案