Androidはじめに(ログイン/登録)画面のアプリケーション)にリンクインされているような同じ種類のアニメーションを実装したいと思います。
概要画面にビューページャーを使用しており、背景画像の変更時にフェードインフェードアウトアニメーションを実装したいと思います。画面のスワイプによる背景画像の変化にフェードインとフェードアウトのアニメーションを実装したい。どんな助けでもありがたいです。私のレイアウトコードを見てください
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<ImageView
Android:id="@+id/background_image"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:scaleType="centerCrop" />
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
Android:weightSum="7" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_marginRight="10dp"
Android:layout_weight="1"
Android:gravity="right"
Android:orientation="horizontal" >
<ImageView
Android:id="@+id/imageView2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_marginRight="5dp"
Android:src="@drawable/icon_skip" />
<TextView
Android:id="@+id/skip_tv"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:text="Skip"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:textColor="@Android:color/white" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="4"
Android:gravity="bottom"
Android:orientation="vertical" >
<ImageView
Android:id="@+id/imageView3"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:src="@drawable/logo" />
<Android.support.v4.view.ViewPager
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/pager"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
tools:context="com.xyz.View.IntroductionScreen" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="2"
Android:gravity="center"
Android:orientation="vertical" >
<Button
Android:id="@+id/connection_bt"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="10dp"
Android:layout_marginLeft="40dp"
Android:layout_marginRight="40dp"
Android:background="@drawable/button"
Android:text="CONNEXION"
Android:textColor="@Android:color/white" />
<Button
Android:id="@+id/register_bt"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginLeft="40dp"
Android:layout_marginRight="40dp"
Android:layout_marginTop="10dp"
Android:background="@drawable/button"
Android:text="INSCRIPTION"
Android:textColor="@Android:color/white" />
</LinearLayout>
</LinearLayout>
そして、ページャーフラグメントレイアウトの表示は
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<LinearLayout
Android:id="@+id/text_layout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="10dp"
Android:orientation="vertical" >
<TextView
Android:id="@+id/tagline_tv1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:singleLine="true"
Android:text="Laissez votre prochain job"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:textColor="@Android:color/white" />
<TextView
Android:id="@+id/details_tv"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:maxLines="2"
Android:text="vous trouver"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:textColor="@Android:color/white" />
</LinearLayout>
</RelativeLayout>
サンプルSplashs creenこれは私が実装したいものです。 ありがとうございました
これは lag free
1つで、Buttons
も処理します
本旨:
1)最初にフラグメントの透明な背景を作成します。
2)LayerDrawable
を作成し、各フラグメントの背景画像をアイテムとして追加します。次に、LayerDrawable
をビューページャーの背景として追加します。
3)onCreate
メソッドで各レイヤーのアルファを正しく設定し、上のレイヤーのアルファの値が255になるようにします。
4)FragmentStatPagerAdapter
で宣言した描画可能なインデックスに対応するタグをLayerDrawable
の各ビューに設定します。たとえば、アプリを開いたときにFragmentA
が表示されているので、そのタグは2(0から始まる)の上部のドローアブルに対応している必要があります。最後のページのタグは0でなければなりません。これは最低のドローアブルに対応します。
5)関数transformPage
で各ビューのドローアブルを変更
6)ボタンを追加するには、RelativeLayout
を使用します。すべてのビューの上にボタンを配置するには、RelativeLayout
を使用します。その後、子供たちはZ軸上に配置されます。あなたはコードでそれを見ることができます:
コードを見てみましょう:
主な活動
public class MainActivity extends FragmentActivity {
ViewPager viewPager=null;
int numberOfViewPagerChildren = 3;
int lastIndexOfViewPagerChildren = numberOfViewPagerChildren - 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
final LayerDrawable background = (LayerDrawable) viewPager.getBackground();
background.getDrawable(0).setAlpha(0); // this is the lowest drawable
background.getDrawable(1).setAlpha(0);
background.getDrawable(2).setAlpha(255); // this is the upper one
viewPager.setPageTransformer(true, new ViewPager.PageTransformer() {
@Override
public void transformPage(View view, float position) {
int index = (Integer) view.getTag();
Drawable currentDrawableInLayerDrawable;
currentDrawableInLayerDrawable = background.getDrawable(index);
if(position <= -1 || position >= 1) {
currentDrawableInLayerDrawable.setAlpha(0);
} else if( position == 0 ) {
currentDrawableInLayerDrawable.setAlpha(255);
} else {
currentDrawableInLayerDrawable.setAlpha((int)(255 - Math.abs(position*255)));
}
}
});
}
class MyAdapter extends FragmentStatePagerAdapter
{
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment=null;
if(i==0)
{
fragment=new FragmentA();
}
if(i==1)
{
fragment=new FragmentB();
}
if(i==2)
{
fragment=new FragmentC();
}
return fragment;
}
@Override
public int getCount() {
return numberOfViewPagerChildren;
}
@Override
public boolean isViewFromObject(View view, Object object) {
if(object instanceof FragmentA){
view.setTag(2);
}
if(object instanceof FragmentB){
view.setTag(1);
}
if(object instanceof FragmentC){
view.setTag(0);
}
return super.isViewFromObject(view, object);
}
}
}
activity_main.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<Android.support.v4.view.ViewPager
Android:id="@+id/pager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/layerdrawable" >
</Android.support.v4.view.ViewPager>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:orientation="horizontal"
Android:layout_marginBottom="48dip" >
<Button
Android:layout_width="0dip"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="Sign in"
Android:layout_margin="16dip"
Android:background="#2ec6e4"
Android:textColor="#FFFFFF" />
<Button
Android:layout_width="0dip"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="Join us"
Android:background="#2ec6e4"
Android:layout_margin="16dip"
Android:textColor="#FFFFFF"
/>
</LinearLayout>
</RelativeLayout>
LayerDrawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<bitmap
Android:id="@+id/Idofbg3"
Android:gravity="fill"
Android:src="@drawable/bg3" />
</item>
<item>
<bitmap
Android:id="@+id/Idofbg2"
Android:gravity="fill"
Android:src="@drawable/bg2" />
</item>
<item>
<bitmap
Android:id="@+id/Idofbg1"
Android:gravity="fill"
Android:src="@drawable/bg1" />
</item>
</layer-list>
単にフラグメントを宣言したくない怠惰な人々のために:
フラグメントA
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_a,container,false);
return v;
}
}
fragment_a.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent" Android:layout_height="match_parent"
Android:id="@+id/FragmentA"
Android:background="@Android:color/transparent">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceLarge"
Android:text="This is Fragment A"
Android:textColor="#FFFFFF"
Android:id="@+id/textView"
Android:gravity="center"
Android:layout_alignParentTop="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentBottom="true" />
</RelativeLayout>
ViewPager.PageTransformer をViewPager
に設定し、aplha
およびtranslation
アニメーションプロパティを使用して目的のアニメーションを実現します。
最も重要な入力は、position
コールバックに渡されるtransformPage
パラメータです。位置の値は、ビューが現在どのように配置されているかを示します。
ViewPagerのビューが全幅であると仮定して、位置の値をどのように解釈する必要があるかを次に示します。
------------------------------------------------------------------------------------
position | what does it mean
------------------------------------------------------------------------------------
0 | view is positioned in the center and fully visible to the user.
-1 | view is positioned in the left and not visible to the user.
1 | view is positioned in the right and not visible to the user.
>-1 & <0 | view is being scrolled towards left and is partially visible.
>0 & <1 | view is being scrolled towards right and is partially visible.
------------------------------------------------------------------------------------
mPager.setPageTransformer(true, new ViewPager.PageTransformer() {
@Override
public void transformPage(View view, float position) {
// Ensures the views overlap each other.
view.setTranslationX(view.getWidth() * -position);
// Alpha property is based on the view position.
if(position <= -1.0F || position >= 1.0F) {
view.setAlpha(0.0F);
} else if( position == 0.0F ) {
view.setAlpha(1.0F);
} else { // position is between -1.0F & 0.0F OR 0.0F & 1.0F
view.setAlpha(1.0F - Math.abs(position));
}
// TextView transformation
view.findViewById(R.id.textView).setTranslationX(view.getWidth() * position);
}
});
ここにレイアウトがあります:
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<ImageView
Android:layout_alignParentTop="true"
Android:id="@+id/imageView"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/textView" />
</RelativeLayout>
これがスクリーンレコードです: