Programmatically Translate View Pre-Honeycomb

后端 未结 7 1780
借酒劲吻你
借酒劲吻你 2021-01-30 00:09

How can I programmatically translate an arbitrary view without using an animation (android.view.animation.*)?

API 11 introduced setTranslationX

7条回答
  •  没有蜡笔的小新
    2021-01-30 00:35

    One alternative to TranslateAnimation is to subclass a View and translate the Canvas on dispatchDraw. Something like:

     public class TranslateView extends View {
    
            private float mTranslationX = 0;
            private float mTranslationY = 0;
            private boolean mWillUseSDKTranslation = true;
    
            @Override
            protected void dispatchDraw(final Canvas canvas) {
                if (mWillUseSDKTranslation == false) {
                    // keep track of the current state
                    canvas.save(Canvas.MATRIX_SAVE_FLAG);
                    // translate
                    canvas.translate(mTranslationX, mTranslationY);
                    // draw it
                    super.dispatchDraw(canvas);
                    // restore to the previous state
                    canvas.restore();
                } else {
                    super.dispatchDraw(canvas);
                }
            }
    
            public void setTranslationValue(final float aTranslationX, final float aTranslationY) {
                if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
                    mWillUseSDKTranslation = false;
                    mTranslationX = aTranslationX;
                    mTranslationY = aTranslationY;
                    invalidate();
                } else {
                    setTranslationX(aTranslationX);
                    setTranslationY(aTranslationY);
                }
            }
    
        }
    

提交回复
热议问题