2017-10-24 16 views
0

詳細については、私のthis previous questionを参照してください。LAYOUTを右から左にアニメーション化する方法は?

私はスライドインメニューを持っていると思った、メニュー自体は、いくつかの画像とテキストビューを含む、グリッドビューです。

これは私がやったことです:constaintレイアウトを使用して、私は右の私がしなければならなかったすべては、画面外側から内側にそれを移動することであると考え、画面の右端外に置きました。

私は多くの問題が発生しているが、それにもかかわらず、私はそれらのほとんどを解決しました。今私は解決できない1つの問題があります:

"ビュー"をアニメーション化すると、例えばonTouchListenerが応答する領域がプログラムで反応する領域は移動しません。言い換えれば、ビューのグラフィカル表現、画像は移動されますが、プログラミングのものやレイアウト(おそらくレイアウトが正しいものであるかわかりませんが、残念です)後ろに。

今、あなたは私の困惑を理解することができます。私は、グラフィックスとリアクティブエリアの両方をターゲットデスティネーションに移動したい。言い換えれば、ユーザーは画面の右端から入ってくるメニューを見ることができるだけでなく、メニューをクリックできるようにすべきであり、応答する必要があります。

しかし、私が悩んでいるのは、ユーザーがビューを見ることができるということです。しかし、タブをクリックすると何も起こりません。反応領域、レイアウト(これは正しいことがわかりません)がスクリーンの外に残ってしまった。

私はあなたが何を考えている知っている:それは難しいことではありません

さて、ここでの事だ、と私は最終的だ」だから

setLayoutParams 

を使用して、レイアウトの新しい場所を設定します? 。私がしなければならないか、全体の問題ではなく、急激なように見えるだろう何かであるすべてのバックグラウンド、後に、ポイントに来

は、ここで翻訳アニメーションXMLスクリプトです:

<?xml version="1.0" encoding="utf-8"?> 
<set 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator" 
android:fillAfter="true"> 

<translate 
    android:fromXDelta="0%" 
    android:toXDelta="-100%" 
    android:duration="300" 
    /> 
</set> 

あなたが見ることができるように、私は画像を移動しています、私のレイアウト/ビューのグラフィック表示/何でも私のレイアウト/ビュー/反応面積の-100%です。これを使用するとどうなりますか?

constraintLayoutParams.leftMargin = 1958; 
swipeGridMenu.setLayoutParams(constraintLayoutParams); 

?ユーザーは画面の右側にメニューを表示しますが、画面の右端には表示されません。代わりに、メニューの間に空白があります(反応領域が 'それがリアクションエリア/レイアウトであるので、それは適切に整列され、それは残されています)とスクリーンの右端とブランクエリアの幅はメニューの幅です。

enter image description here

そして、私はあきらめています:次のグラフは、状況がどのようなものであるかを示しています。どのように私はこれを微調整しても、それはいつも厄介なものと理想的でないもので終わるでしょう。では、レイアウト全体をアニメーション化して移動するにはどうすればよいですか?私はちょうど私のグリッドビューメニューを新しい場所にスムーズに移動し、そこにとどまらせてクリック可能にしたい。

ご協力いただきますようお願い申し上げます。

+1

興味深い!私にそれを実装する時間を与えてください。 :-) –

答えて

1

public class AnimationActivity extends AppCompatActivity { 


    int i = 0; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.abc); 
     ImageView imageView = (ImageView) findViewById(R.id.imageView); 

     imageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getApplicationContext(), "clicked : #"+i++, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     imageView.setTranslationY(2000); 

     imageView.animate().translationY(0) 
       .setInterpolator(new FastOutLinearInInterpolator()) 
       .setDuration(10000) 
       .start(); 

    } 
} 

R.layoutを。 abc

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/imageView" 
     app:srcCompat="@drawable/ic_boy" 
     android:layout_gravity="center_horizontal" 
     android:layout_width="100dp" 
     android:layout_height="100dp" /> 

</FrameLayout> 
+1

魅力的な作品!ありがとうRahul!あなたは私の公式に好きな男です! – VictorCharlie23

+0

補足してくれてありがとうが、私も行くには長い道のりがある:-) –

1

ConstraintLayoutCoordinatorLayoutのメニューのコンテナとして使用し、TransitionManagerを使用してレイアウトをアニメーションできます。私はこのアプローチを使用して画面の一番下からListViewをフェードインまたはフェードインします。リストビューは常に利用可能ですが、可視性はView.GONEに設定されています。あなたは次の操作を行うことができますビューにフェードインするには:

TransitionManager.beginDelayedTransition(layoutContainer); 
listView.setVisibility(View.VISIBLE); 

フェードアウトするために、あなたは、単にしなければならない:これは正常に動作している

TransitionManager.beginDelayedTransition(layoutContainer); 
listView.setVisibility(View.GONE); 
+0

ありがとう、私はそれが動作すると確信していますが、私は怠惰であり、あまりにも多くの変更を自分の現在のコードを行う必要があります。とにかくありがとう! – VictorCharlie23

関連する問題