RelativeLayout
には、button
とbutton2
の2つのボタンがあります。これらの3自体はルートビューの内側にあり、RelativeLayout
です。同じ境界で親レイアウトに子ビューを追加
私はここで達成しようとしていますと、button
はbutton2
をクリックされたときから除去されなければならないということである内RelativeLayout
(そのIDはotherLayout
です)、それはにあったようにrootView
あるルートView
に同じ範囲で追加されます内側のレイアウト
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rootView"
tools:context="com.test.testproject.MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/otherLayout"
>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="53dp"
android:layout_marginTop="94dp"
android:text="One" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button"
android:layout_marginStart="76dp"
android:layout_toEndOf="@+id/button"
android:text="Two" />
</RelativeLayout>
</RelativeLayout>
Javaコード
public class MainActivity extends AppCompatActivity {
Button button,button2;
int mLeft,mRight,mTop,mBottom;
RelativeLayout otherLayout;
RelativeLayout rootView;
ViewGroup childParent;
int[] mBounds = new int[2];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button2 = (Button) findViewById(R.id.button2);
// rootView = (RelativeLayout) findViewById(R.id.rootView);
rootView = (RelativeLayout) findViewById(R.id.rootView);
otherLayout = (RelativeLayout) findViewById(R.id.otherLayout);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Rect r = new Rect();
button2.getLocalVisibleRect(r);
// button2.getDrawingRect(r);
// ((ViewGroup)button2.getParent()).offsetDescendantRectToMyCoords(button2, r);
mLeft = r.left;
mRight = r.right;
mBottom = r.bottom;
mTop = r.top;
childParent = (ViewGroup) button2.getParent();
((ViewGroup)button2.getParent()).removeView(button2);
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
button2.setTop(mTop);
button2.setLeft(mLeft);
button2.setBottom(mBottom);
button2.setRight(mRight);
/*
button2.setX(mBounds[1]);
button2.setY(mBounds[0]);*/
((ViewGroup)rootView).addView(button2);
}
},1000);
}
});
}
}
私はさまざまな方法を試みたが、うまくいく:
は、ここに私のXMLとJavaコードです。私はgetLocalVisibleRect()
,getDrawingRect()
とすべてを使用しました(コメント付きのコードで見ることができます)。
どのようにこれを達成できますか?内側のレイアウトにあり、ルートに追加した後のView
は同じ境界とパラメータを持つ必要があり、画面上の位置も変更してはならないということです。
は、なぜあなたはUIを変更したくない場合は、あなたのボタンはRelativeLayoutの外に移動したいのですか? – Eselfar
その目的は何ですか?ユースケースを明確にする。 – azizbekian
@Eselfar - レイアウトの上にターゲット 'View'を実際にオーバーレイするだけです.Viewの位置は変更されたように見えません。その後、他のビューの上にこのビューを描画するズームアニメーションを実行します。私は 'clipChildren'を' false'にすることを試みましたが、それはそのトリックをしませんでした。 –