プログラムでImageViewの位置を取得したいとします。その位置は、親子ではなくスクリーンに対するピクセル単位のimageViewの位置です。レイアウト方向は左から右ですが、右から左に向かって方向を変更すると、奇妙な値が返されます(これはisseuです)。 アクティビティがrtlをサポートしている場合、どのようにポジションを取得できますか?私が発見したImageViewの位置を右から左の方向に設定するには
いくつかの解決策:私の活動で
1) private int getRelativeTop(View myView) {
if (myView.getParent() == myView.getRootView())
return myView.getTop();
else
return myView.getTop() + getRelativeTop((View) myView.getParent());}
2) image.getLocationOnScreen(int[] locaiton);
UPDATE
を私は3 imageviewsを持って、私がイメージ1から画像2の(translteアニメーション)画像3を移動させます。 image1位置からimage2位置への移動を開始します。ltrを使用しているときは正しい位置にアニメーションが適用されますが、supportrtl = "true"に変更するとアニメーションがまったく表示されません。
これはXMLファイルである
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/rootParent"
android:orientation="vertical"
android:layout_height="match_parent">
<ImageView
android:id="@+id/piece_FLOAT"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/piece1"
android:translationZ="@dimen/activity_horizontal_margin" />
<ImageView
android:id="@+id/piece_1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="8dp"
android:src="@drawable/piece1" />
<ImageView
android:id="@+id/piece_2"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="8dp"
android:src="@drawable/piece1" />
</LinearLayout>
、それは非常になりますが、いくつかのピクセルを追加作業LTR、私が使用している場合、これは
public class AnimateActivity extends AppCompatActivity {
ImageView imageViewfrom, imageViewto;
ImageView imageViewFLOAT;
LinearLayout L_33;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_animate);
imageViewfrom = (ImageView)findViewById(R.id.piece_1);
imageViewto = (ImageView)findViewById(R.id.piece_2);
imageViewFLOAT = (ImageView)findViewById(R.id.piece_FLOAT);
assert imageViewfrom != null;
assert imageViewto != null;
imageViewfrom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int[] ToLocation = new int[2];
imageViewto.getLocationOnScreen(ToLocation);
float xTO = ToLocation[0];//imageViewto.getX(); //ToLocation[0];
float yTO = ToLocation[1];//imageViewto.getY();//ToLocation[1];
int[] FromLocation = new int[2];
imageViewfrom.getLocationOnScreen(FromLocation);
float xFROM = FromLocation[0];//imageViewfrom.getX();///FromLocation[0];
float yFROM = FromLocation[1]; //imageViewfrom.getY();//FromLocation[1];
Log.e("xFrom =" + xFROM, "xTo =" + xTO);
Log.e("yFrom =" + yFROM, "yTo =" + yTO);
// Log.e("offset =" + topOffset, "xTo =" + 0);
ValueAnimator animatorX = ObjectAnimator.ofFloat(imageViewFLOAT, "x", xFROM, xTO).setDuration(1500);
ValueAnimator animatorY = ObjectAnimator.ofFloat(imageViewFLOAT, "y", yFROM, yTO).setDuration(1500);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(animatorX, animatorY);
animatorSet.start();
// Animation an = new TranslateAnimation(xFROM, xTO, yFROM , yTO);
// an.setDuration(1500);
// an.setFillAfter(true);// to keep the state after animation is finished
// imageViewFLOAT.startAnimation(an);// to start animation obviously
}
});
}
}
Javaクラスです。 rtlを使うとアニメーションが見えませんでした。なぜこれが起こるのですか?
ありがとうございました。
はい、 'getLocationOnScreen'はあなたが望むものです – pskink
私はこのメソッドを使用しますが、それは私に画面の境界線の外に値を与えました。何故かはわからない? –
あなたはどうしますか? – pskink