android坐標(biāo)系簡記

在對View進行屬性變化時候:
ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "scaleX", 2);

  • 對視圖進行放大或者縮小,view.getWidth()始終不變,變換后的實際寬度為view.getWidth()*view.getScaleX()。
  • view.getLeft(),view.getTop(),view.getRight(),view.getBottom()取得值如下,并且它們的值不會因為平移或者縮放等操作而變化。
    653161-20171123143730727-229301910.png
  • view.getX()以及view.getY()的值不會隨著視圖的放大或者縮小而改變。
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "scaleX", 2);
                AnimatorSet set = new AnimatorSet();
                set.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {
                        Log.i("hhhd", "onAnimationStart: view.getX(): "+view.getX() +"  view.getWidth():  "+view.getWidth()+ "  v.getTranslationX():"+view.getTranslationX());
                    }

                    @Override
                    public void onAnimationEnd(Animator animation) {
                        Log.i("hhhd", "onAnimationStart: view.getX(): "+view.getX() +"  view.getWidth():  "+view.getWidth()+ "  v.getTranslationX():"+view.getTranslationX()) ;
                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {

                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {

                    }
                });
                set.play(animator1);
                set.setDuration(2000);
                set.start();
            }
        });

結(jié)果為

hhhd: onAnimationStart: view.getX(): 260.0  view.getWidth():  200  v.getTranslationX():0.0
hhhd: onAnimationStart: view.getX(): 260.0  view.getWidth():  200  v.getTranslationX():0.0


  • 如果同時對視圖進行縮放并且平移。
 findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "scaleX", 2);
                ObjectAnimator animator2 = ObjectAnimator.ofFloat(view, "translationX",view.getTranslationX()+100);

                AnimatorSet set = new AnimatorSet();
                set.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {
                        Log.i("hhhd", "onAnimationStart: view.getX(): "+view.getX() +"  view.getWidth():  "+view.getWidth()+ "  v.getTranslationX():"+view.getTranslationX());
                    }

                    @Override
                    public void onAnimationEnd(Animator animation) {
                        Log.i("hhhd", "onAnimationStart: view.getX(): "+view.getX() +"  view.getWidth():  "+view.getWidth()+ "  v.getTranslationX():"+view.getTranslationX()) ;
                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {

                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {

                    }
                });
                set.play(animator1).with(animator2);
                set.setDuration(2000);
                set.start();
            }
        });

結(jié)果如下:

hhhd: onAnimationStart: view.getX(): 260.0  view.getWidth():  200  v.getTranslationX():0.0
hhhd: onAnimationStart: view.getX(): 360.0  view.getWidth():  200  v.getTranslationX():100.0

結(jié)果可以知道,只有平移才可以改變View.getX()或者View.getY()的值,視圖的放大縮小無法影響任何坐標(biāo)值。
如果此時需要獲取到視圖縮放之后的值:

view.getWidth() * view.getScaleX()

如果此時需要獲取放大之后的視圖的左邊實際X坐標(biāo):

view.getX() - (view.getWidth() * view.getScaleX() - view.getWidth())
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容