التجزئة او التقسيم المتنقل أو المتغيرة او المتحولة Android -Fragment Transition#

التجزئة او التقسيم المتنقل أو المتغيرة او المتحولة 

Android -Fragment Transition#

التجزئة او التقسيم المتنقل أو المتغيرة او المتحولة Android -Fragment Transition#

ماهو التجزئة  او التقسيم  المتحول What is a Transition?


تم تصميم انتقالات النشاط والتجزئة  في Lollipop على ميزة جديدة نسبيًا في Android تسمى Transitions.  تم تقديم إطار انتقال في KitKat ، وهو يوفر واجهة برمجة تطبيقات ملائمة للتنشيط بين حالات واجهة المستخدم المختلفة في التطبيق.  تم بناء الإطار حول مفهومين رئيسيين: المشاهد والتحولات.  يحدد المشهد حالة معينة من واجهة المستخدم الخاصة بالتطبيق ، في حين يحدد الانتقال التغيير المتحرك بين مشاهدين.
 عندما يتغير المشهد ، يكون للتحول مسؤوليتان رئيسيتان -
 التقاط حالة كل طريقة عرض في كل من مشاهد البداية والنهاية.
 قم بإنشاء Animator استنادًا إلى الاختلافات التي ستنشط المشاهدات من مشهد إلى آخر.

مثال Example


يوضح هذا المثال كيفية إنشاء الرسوم المتحركة المخصصة الخاصة بك مع الانتقال الجزئي.  لذلك دعونا نتبع الخطوات التالية على غرار الخطوات التي اتبعناها أثناء إنشاء Hello World Example -
التسلسلالوصف
1ستستخدم Android Studio لإنشاء تطبيق Android وتسميته كرسوم متحركة مخصصة ضمن حزمة com.example.fragmentcustomanimations ، مع نشاط فارغ.
2قم بتعديل activity_main.xml ، الذي وضع في res / layout / activity_main.xml لإضافة طريقة عرض نص
3قم بإنشاء تخطيط يسمى fragment_stack.xml.xml ضمن دليل res / layout لتحديد علامة جزء العلامة وعلامة الزر
4قم بإنشاء مجلد يوضع في res / وقم بتسميته كرسوم متحركة وأضف fragment_slide_right_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"?>
 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"?>

   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >
   
   
      android:id="@+id/fragment1"
      android:name="com.pavan.listfragmentdemo.MyListFragment"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

فيما يلي محتوى ملف res / animation / fragment_slide_left_enter.xml.  انها تحتوي على طريقة مجموعة والرسوم المتحركة وجوه
xml version="1.0" encoding="utf-8"?>
 xmlns:android="http://schemas.android.com/apk/res/android">
   
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="100dp" android:valueTo="0dp"
      android:valueType="floatType"
      android:propertyName="translationX"
      android:duration="@android:integer/config_mediumAnimTime" />
   
   
      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" />
فيما يلي محتوى res / animation / fragment_slide_left_exit.xml file.it المضمّن وعلامات رسوم متحركة للكائنات والمجموعات.

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

ستكون التعليمة البرمجية التالية محتوى res / animation / fragment_slide_right_enter.xmlfile.it المضمّنة وعلامات الرسوم المتحركة للكائنات والمجموعات المضمّنة
xml version="1.0" encoding="utf-8"?>
 xmlns:android="http://schemas.android.com/apk/res/android">
   
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="-100dp" android:valueTo="0dp"
      android:valueType="floatType"
      android:propertyName="translationX"
      android:duration="@android:integer/config_mediumAnimTime" />
   
   
      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" />

سيكون الكود التالي هو محتوى res / animation / fragment_slide_right_exit.xmlfile ، وعلامات الرسوم المتحركة للمجموعة والكائنات المضمنة
xml version="1.0" encoding="utf-8"?>
 xmlns:android="http://schemas.android.com/apk/res/android">
   
      android:interpolator="@android:interpolator/decelerate_quint"
      android:valueFrom="0dp" android:valueTo="100dp"
      android:valueType="floatType"
      android:propertyName="translationX"
      android:duration="@android:integer/config_mediumAnimTime" />
    
   
      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" />

سوف يكون الكود التالي محتوى ملف src / main / java / MainActivity.java.  أنه يحتوي على مستمع زر ، جزء مكدس و 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"?>
    xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.fragmentcustomanimations"
   android:versionCode="1"
   android:versionName="1.0" >
   
   
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
         
      
         android:name="com.example.fragmentcustomanimations.MainActivity"
         android:label="@string/app_name" >
         
         
             android:name="android.intent.action.MAIN" />
             android:name="android.intent.category.LAUNCHER" />
         

تشغيل التطبيقRunning the Application


دعونا نحاول تشغيل تطبيق انتقالات Fragment الذي أنشأناه للتو.  أفترض أنك قمت بإنشاء AVD أثناء القيام ببيئة الإعداد.  لتشغيل التطبيق من Android Studio ، افتح أحد ملفات أنشطة المشروع وانقر على أيقونة Run Eclipse Run Icon من شريط الأدوات.  يقوم Android بتثبيت التطبيق على AVD الخاص بك ويبدأ تشغيله وإذا كان كل شيء على ما يرام مع الإعداد والتطبيق ، فسيتم عرضه بعد نافذة Emulator:
Android fragment transit

إذا نقرت على جزء جديد ، فسيغير الجزء الأول إلى الجزء الثاني كما هو موضح أدناه
second fragment