view.getX()、view.getY()、view.getLeft()、view.getRight()、view.getTranslationX()与动画
基础知识:
- android有两个坐标系:①屏幕坐标系 ②视图坐标系
- 以屏幕坐标系为参照对象的有:event.getRawX()、event.getRawY()
- 除了以屏幕坐标系为参照对象的都是以视图坐标系为参考对象
- 这里的event指的是MotionEvent类型的对象
- 动画:属性动画(ObjectAnimator)和View动画(如TranslationAnimation)
初始状态
对应的代码如下:
———————activity_main.xml————————–
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:layout_marginTop="10dp"
android:id="@+id/bt_x"
android:layout_width="100dp"
android:layout_height="100dp"
android:text="scrollXClick"
android:onClick="scrollXClick"
/>
<Button
android:layout_marginTop="10dp"
android:id="@+id/bt_y"
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="scrollYClick"
android:onClick="scrollYClick"
/>
</LinearLayout>
——————MainActivity.java——————————-
package haha.com.c7;
import android.animation.ObjectAnimator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
Button bt_x;
Button bt_y;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_x = (Button) findViewById(R.id.bt_x);
bt_y = (Button) findViewById(R.id.bt_y);
}
//横坐标方向分析ObjectAnimator和view.getX()、view.getLeft()、view.getRight()
// 、view.getTranslationX()、view.getScrollX()的关系
public void scrollXClick(View view) {
Log.d(TAG, "scrollX: getX()= " + bt_x.getX()
+ " tranlationX=" + bt_x.getTranslationX()
+ " getLeft()=" + bt_x.getLeft() + " getRight()=" + bt_x.getRight()
+ " getScrollX=" + bt_x.getScrollX() + " getScrollY=" + bt_x.getScrollY()
);
ObjectAnimator.ofFloat(view,"translationX",200).setDuration(1000).start();
}
//纵坐标方向分析Translation和view.getY()、view.getTop()、view.getBottom()
// 、view.getTranslationY()、view.getScrollY()的关系
public void scrollYClick(View view) {
Log.d(TAG, "scrollY: getY()=" + bt_y.getY()
+ " translationY=" + bt_y.getTranslationY()
+ " topY=" + bt_y.getTop() + " getbuttom()=" + bt_y.getBottom()
+ " getScrollX=" + bt_y.getScrollX() + " getScrollY=" + bt_y.getScrollY()
);
TranslateAnimation translateAnimation = new TranslateAnimation(0,0,0,300);
translateAnimation.setDuration(1000);
translateAnimation.setFillAfter(true);
view.startAnimation(translateAnimation);
}
}
步骤一:点击第一个按钮
打印结果:
如果看不清上图看这里: D/MainActivity: scrollX: getX()= 0.0 tranlationX=0.0 getLeft()=0 getRight()=200 getScrollX=0 getScrollY=0
- 步骤二:再点击第一个按钮
结果如下: D/MainActivity: scrollX: getX()= 200.0 tranlationX=200.0 getLeft()=0 getRight()=200 getScrollX=0 getScrollY=0
效果图:
- 步骤三:点击最下面的按钮
打印结果(初始状态):D/MainActivity: scrollY: getY()=240.0 translationY=0.0 topY=240 getbuttom()=440 getScrollX=0 getScrollY=0
- 步骤四:再一次点击最下面的按钮
D/MainActivity: scrollY: getY()=240.0 translationY=0.0 topY=240 getbuttom()=440 getScrollX=0 getScrollY=0
效果图