Դաս 11.3 – Android Development։ Ֆրագմենտի Փոփոխություն

0

Ինչ է Փոփոխությունը ?

Գործունեության և ֆրագմենտի փոփոխությունները Lollipop-ում ստեղծված են Android-ի նոր առանձնահատկության հիման վրա, որոնք կոչվում են փոփոխություններ: KitKat-ում ներկայացված, փոփոխության շրջանակը տրամադրում է հարմարավետ API, տարբեր UI-ների միջև հավելվածում: Շրջանակը ստեղծված է երկու կոնցեպտների շուրջ. Տեսարաններ և փոփոխություններ: Տեսարանը սահմանում է տրված վիճակը UI հավելվածի, իսկ փոփոխությունը սահմանում է  անիմացված տարբերությունը երկու տեսարանների:

Երբ տեսարանը փոփոխվում է, Փոփոխությունը ունի երկու հիմնական պարտականոթյուններ−

  • Գրավեք յուրաքանչյուր view-ի վիճակը սկզբի և վերջի տեսարաններում:
  • Ստեղծեք Animator, տարբերություների վրա հիմնված, որն կանիացնի view-երը, մի տեսարանից մյուսը:

Օրինակ

Այս օրինակը կբացատրի ինչպես ստեղծել   custom animation, ֆրագմենտի փոփոխությամբ: Եկեք հետևենք այս քայլերին:

Քայլ Նկարագրություն
1 Կօգտագործեք Android Studio ստեղծելու Android հավելված և անվանեք այն fragmentcustomanimations  , com.example.fragmentcustomanimations փաթեթի ներքո, դատարկ Activity-ով:
2 Փոփոխեք activity_main.xml, որն  տեղադրված է res/layout/activity_main.xml –ում, ավելացնելու Text View
3 Ստեղծեք  նախագիծ, որն անվանվում է fragment_stack.xml.xml  res/layout-ի ներքո, որն բացատրում է  ձեր ֆրագմենտի  և կոճակի tag-ը:
4 Ստեղծեք թղթապանակ, որն տեղադրված է, res/ և անվանեք այն animation and add fragment_slide_left_enter.xml fragment_slide_left_exit.xml, ,fragment_slide_right_exit.xml և fragment_slide_left_enter.xml
5 MainActivity.java-ում, պետք է ավլացնել ֆրագմենտ բուրգ, ֆրագմենտ մենեջեր, և onCreateView()
6 Միացրեք հավելվածը սկսելու Android էմուլյատորը և հաստատել փոփոխությունների արդյունքը հավելվածում:

Հետևյալը կլինի res.layout/activity_main.xml –ի բովանդակությունը ,որն ներառում է TextView

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/text"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:gravity="center_vertical|center_horizontal"
   android:text="@string/hello_world"
   android:textAppearance="?android:attr/textAppearanceMedium" />

Հետևյալը կլինի res/animation/fragment_stack.xml ֆայլի բովանդակությունը. Այն ներառում է շրջանակի նախագիծը և կոճակը

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >
   
   <fragment
      android:id="@+id/fragment1"
      android:name="com.pavan.listfragmentdemo.MyListFragment"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

</LinearLayout>

Հետևյալը կլինի res/animation/fragment_slide_left_enter.xml ֆայլի բովանդակությունը. Այն ներառում է մեթոդ և օբյեկտի անիմատոր

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <objectAnimator
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="100dp" android:valueTo="0dp"
      android:valueType="floatType"
      android:propertyName="translationX"
      android:duration="@android:integer/config_mediumAnimTime" />
   
   <objectAnimator
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="0.0" android:valueTo="1.0"
      android:valueType="floatType"
      android:propertyName="alpha"
      android:duration="@android:integer/config_mediumAnimTime" />
</set>

Հետևյլաը կլինի res/animation/fragment_slide_left_exit.xml ֆայլի բովանդակությունը.Այն ներառում  է  set և object անիմատոր tag-եր:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <objectAnimator
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="0dp" android:valueTo="-100dp"
      android:valueType="floatType"
      android:propertyName="translationX"
      android:duration="@android:integer/config_mediumAnimTime" />
   
   <objectAnimator
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="1.0" android:valueTo="0.0"
      android:valueType="floatType"
      android:propertyName="alpha"
      android:duration="@android:integer/config_mediumAnimTime" />
</set>

Հետևյալ կոդը կլինի res/animation/fragment_slide_right_enter.xml ֆայլի-ի բովանդակությունը, որը ներառում է  set և object անիմատոր tag-եր

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <objectAnimator
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="-100dp" android:valueTo="0dp"
      android:valueType="floatType"
      android:propertyName="translationX"
      android:duration="@android:integer/config_mediumAnimTime" />
   
   <objectAnimator
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="0.0" android:valueTo="1.0"
      android:valueType="floatType"
      android:propertyName="alpha"
      android:duration="@android:integer/config_mediumAnimTime" />
</set>

Հետևյալ կոդը կլինի res/animation/fragment_slide_right_exit.xml ֆայլի բովանդակությունը, այն ներառում է set և object անիմատոր tag-եր

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <objectAnimator
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="0dp" android:valueTo="100dp"
      android:valueType="floatType"
      android:propertyName="translationX"
      android:duration="@android:integer/config_mediumAnimTime" />
    
   <objectAnimator
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="1.0" android:valueTo="0.0"
      android:valueType="floatType"
      android:propertyName="alpha"
      android:duration="@android:integer/config_mediumAnimTime" />
</set>

Հետևյալ կոդը կլինի src/main/java/MainActivity.java ֆայլի բովանդակությունը, այն ներառում է կոճակի listener, ֆրագմենտի բուրգ և  onCreateView

package com.example.fragmentcustomanimations;
 
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;

import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;

import android.widget.Button;
import android.widget.TextView;
 
/**
 * Demonstrates the use of custom animations in a FragmentTransaction when
 * pushing and popping a stack.
 */
public class FragmentCustomAnimations extends Activity {
   int mStackLevel = 1;
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.fragment_stack);
      
      // Watch for button clicks.
      Button button = (Button)findViewById(R.id.new_fragment);
      
      button.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
            addFragmentToStack();
         }
      });
      
      if (savedInstanceState == null) {
         // Do first time initialization -- add initial fragment.
         Fragment newFragment = CountingFragment.newInstance(mStackLevel);
         FragmentTransaction ft = getFragmentManager().beginTransaction();
         ft.add(R.id.simple_fragment, newFragment).commit();
      }
      else
      {
         mStackLevel = savedInstanceState.getInt("level");
      }
   }
   
   @Override
   public void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
      outState.putInt("level", mStackLevel);
   }
   
   void addFragmentToStack() {
      mStackLevel++;
   
      // Instantiate a new fragment.
      Fragment newFragment = CountingFragment.newInstance(mStackLevel);
   
      // Add the fragment to the activity, pushing this transaction
      // on to the back stack.
      FragmentTransaction ft = getFragmentManager().beginTransaction();
      ft.setCustomAnimations(R.animator.fragment_slide_left_enter,
      R.animator.fragment_slide_left_exit,
      R.animator.fragment_slide_right_enter,
      R.animator.fragment_slide_right_exit);
      ft.replace(R.id.simple_fragment, newFragment);
      ft.addToBackStack(null);
      ft.commit();
   }
   
   public static class CountingFragment extends Fragment {
      int mNum;
      /**
      * Create a new instance of CountingFragment, providing "num"
      * as an argument.
      */
      static CountingFragment newInstance(int num) {
         CountingFragment f = new CountingFragment();
          
         // Supply num input as an argument.
         Bundle args = new Bundle();
         args.putInt("num", num);
         f.setArguments(args);
         return f;
      }
      
      /**
      * When creating, retrieve this instance's number from its arguments.
      */
      
      @Override
      public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mNum = getArguments() != null ? getArguments().getInt("num") : 1;
      }
      /**
      * The Fragment's UI is just a simple text view showing its
      * instance number.
      */
      
      @Override
      public View onCreateView(LayoutInflater inflater, 
         ViewGroup container,Bundle savedInstanceState) {
         View v = inflater.inflate(R.layout.hello_world, container, false);
         View tv = v.findViewById(R.id.text);
         ((TextView)tv).setText("Fragment #" + mNum);
         tv.setBackgroundDrawable(getResources().
            getDrawable(android.R.drawable.gallery_thumb));
         return v;
      }
   }
}

Հետևյալը կլինի AndroidManifest.xml-ի բովանդակություն

<?xml version="1.0" encoding="utf-8"?>
   <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.fragmentcustomanimations"
   android:versionCode="1"
   android:versionName="1.0" >
   
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
         
      <activity
         android:name="com.example.fragmentcustomanimations.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
         
   </application>
</manifest>

Միացնենք Հավելվածը

Եկեք փորձենք մեր փոփոխված MyFragments հավելվածը, որն նոր ստեղծեցինք: Ենթադրում ենք, որ ստեղծել եք ձեր AVD  environment set-up անելիս: Հավելվածը միացնելու համար Android Studio-ից, բացեք ձեր պրոյեկտների գործունեության ֆայլերից և սեղմեք Run կոճակին: Android Studio-ն ներբեռնում է հավելվածը ձեր AVD-ի վրա և սկսեք հավելվածը գործել, և եթե ամեն ինչ նորմալ է ձեր կարգավորումների հետ, հավելվածը կցուցադրի Էմուլյատոր պատուհան

frag_cust_animations1

Եթե սեղմենք “new fragment” կոժակին կտեսնենք հետևյալ պատուհանը՝

frag_cust_animations2

Հարգելի ընթերցող, խնդրում ենք չմոռանալ like տալ մեր ֆեյսբուքյան էջին, քանի որ նորությունների մեծ մասը առաջինը տեղադրվում է հենց այնտեղ։ Ինչպես նաև հետևեք մեզ այլ սոցիալական ցանցերում և, իհարկե, գրանցվեք մեր բլոգում։

Share.