vendredi 10 février 2017

Android arc motion followed by a circular reveal

Vote count: 0

i'm trying to make a simple app having two activities. The first one has a floating action button when we click on it, it will move in an arc motion to the center of the screen leading us to the second activity where we will have a circular reveal showing the content of the second activity. I tried the code of this beautiful example : http://ift.tt/2lrOrVm

http://ift.tt/2kcvtNB

but i had an error which says :

FATAL EXCEPTION: main
                                                                  Process: com.example.anis.arcmotion, PID: 4505
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.anis.arcmotion/com.example.anis.arcmotion.SecondActivity}: android.view.InflateException: Binary XML file line #10: Binary XML file line #10: Error inflating class <unknown>
                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                      at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                      at android.os.Looper.loop(Looper.java:148)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                   Caused by: android.view.InflateException: Binary XML file line #10: Binary XML file line #10: Error inflating class <unknown>
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                                                                      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280)
                                                                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
                                                                      at com.example.anis.arcmotion.SecondActivity.onCreate(SecondActivity.java:26)
                                                                      at android.app.Activity.performCreate(Activity.java:6237)
                                                                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                      at android.os.Looper.loop(Looper.java:148) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                                                                   Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class <unknown>
                                                                      at android.view.LayoutInflater.createView(LayoutInflater.java:645)
                                                                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764)
                                                                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                                                                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
                                                                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
                                                                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                                                                      at com.example.anis.arcmotion.SecondActivity.onCreate(SecondActivity.java:26) 
                                                                      at android.app.Activity.performCreate(Activity.java:6237) 
                                                                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                      at android.os.Looper.loop(Looper.java:148) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                                                                   Caused by: java.lang.reflect.InvocationTargetException
                                                                      at java.lang.reflect.Constructor.newInstance(Native Method)
                                                                      at android.view.LayoutInflater.createView(LayoutInflater.java:619)
                                                                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764) 
                                                                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                                                                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
                                                                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
                                                                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                                                                      at com.example.anis.arcmotion.SecondActivity.onCreate(SecondActivity.java:26) 
                                                                      at android.app.Activity.performCreate(Activity.java:6237) 
                                                                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                      at android.os.Looper.loop(Looper.java:148) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                                                                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
                                                                      at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:1723)
                                                                      at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1792)
                                                                      at android.graphics.drawable.RippleDrawable$RippleState.<init>(RippleDrawable.java:982)
                                                                      at android.graphics.drawable.RippleDrawable.createConstantState(RippleDrawable.java:973)
                                                                      at android.graphics.drawable.RippleDrawable.createConstantState(RippleDrawable.java:972)
                                                                      at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:1652)
                                                                      at android.graphics.drawable.RippleDrawable.mutate(RippleDrawable.java:959)
                                                                      at android.view.View.applyBackgroundTint(View.java:17413)
                                                                      at android.view.View.setBackgroundDrawable(View.java:17289)
                                                                      at android.support.design.widget.FloatingActionButton.access$501(FloatingActionButton.java:61)
                                                                      at android.support.design.widget.FloatingActionButton$ShadowDelegateImpl.setBackgroundDrawable(FloatingActionButton.java:693)
                                                                      at android.support.design.widget.FloatingActionButtonLollipop.setBackgroundDrawable(FloatingActionButtonLollipop.java:75)
                                                                      at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:139)
                                                                      at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:110)
                                                                      at java.lang.reflect.Constructor.newInstance(Native Method) 
                                                                      at android.view.LayoutInflater.createView(LayoutInflater.java:619) 
                                                                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:764) 
                                                                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                                                                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
                                                                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
                                                                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                                                                      at com.example.anis.arcmotion.SecondActivity.onCreate(SecondActivity.java:26) 
                                                                      at android.app.Activity.performCreate(Activity.java:6237) 
                                                                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                      at android.os.Looper.loop(Looper.java:148) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

 

such that : MainActivity.java

 public class MainActivity extends AppCompatActivity {

FloatingActionButton fab;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    fab= (FloatingActionButton) findViewById(R.id.fab);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
          startSecondActivity();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
public void startSecondActivity(){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        ActivityOptions optionsCompat =
                ActivityOptions.makeSceneTransitionAnimation(this, fab,         fab.getTransitionName());
        startActivity(new Intent(this, SecondActivity.class), optionsCompat.toBundle());
    }else{
        startActivity(new Intent(this, SecondActivity.class));
    }
}

SecondActivity.java

 public class SecondActivity extends AppCompatActivity {

FloatingActionButton floatingActionButton= (FloatingActionButton)  findViewById(R.id.mFab);
RelativeLayout relativeLayout  = (RelativeLayout) findViewById(R.id.activity_second);
LinearLayout linearLayout= (LinearLayout) findViewById(R.id.linearLayout);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_activity);
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setupEnterAnimation();
    }else{
        initViews();
    }

}


@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setupEnterAnimation() {

    Transition transition =     TransitionInflater.from(this).inflateTransition(R.transition.changebounds_with_arcmotion);
    getWindow().setSharedElementEnterTransition(transition);
    transition.addListener(new Transition.TransitionListener() {
        @Override
        public void onTransitionStart(Transition transition) {

        }

        @Override
        public void onTransitionEnd(Transition transition) {
            transition.removeListener(this);
            animateRevealShow(relativeLayout);
        }

        @Override
        public void onTransitionCancel(Transition transition) {

        }

        @Override
        public void onTransitionPause(Transition transition) {

        }

        @Override
        public void onTransitionResume(Transition transition) {

        }
    });
}

public void animateRevealShow(final View viewroot) {

    int cx= (viewroot.getRight()+viewroot.getHeight())/2;
    int cy=(viewroot.getTop()+viewroot.getBottom())/2;
    GUIUtils.animateRevealShow(this, relativeLayout, floatingActionButton.getWidth() / 2, R.color.colorAccent, cx, cy, new OnRevealAnimationListener() {
        @Override
        public void onRevealShow() {
            initViews();
        }

        @Override
        public void onRevealHide() {

        }
    });
}
private void initViews() {
   new Handler().post(new Runnable() {
       @Override
       public void run() {
           Animation animation = AnimationUtils.loadAnimation(SecondActivity.this, android.R.anim.fade_in);
           animation.setDuration(300);
           linearLayout.startAnimation(animation);
           linearLayout.setVisibility(View.VISIBLE);
       }
   });}}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout         xmlns:android="http://ift.tt/nIICcg"
xmlns:app="http://ift.tt/GEGVYd"
xmlns:tools="http://ift.tt/LrGmb4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.anis.arcmotion.MainActivity">

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:clickable="true"
android:transitionName="transition_reveal_contact"
app:srcCompat="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>

second_activity.xml

 <RelativeLayout xmlns:android="http://ift.tt/nIICcg"
xmlns:app="http://ift.tt/GEGVYd"
xmlns:tools="http://ift.tt/LrGmb4"
android:id="@+id/activity_second"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:orientation="vertical"
tools:context="com.example.anis.arcmotion.SecondActivity">

<android.support.design.widget.FloatingActionButton
    android:id="@+id/mFab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    app:backgroundTint="@color/colorAccent"
    app:elevation="0dp"

    app:fabSize="normal"
    app:pressedTranslationZ="8dp" />

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorAccent"
    android:orientation="vertical"
    android:visibility="invisible">

</LinearLayout>

GUIUtils.java

public class GUIUtils {

 public static void animateRevealHide(final Context context, final View   view, final @ColorRes int color, final int finalRadius, final   OnRevealAnimationListener listener) {
    int cx = (view.getRight() + view.getLeft()) / 2;
    int cy = (view.getTop() + view.getBottom()) / 2;

    int initialRadius = view.getWidth();

    Animator anim =
            ViewAnimationUtils.createCircularReveal(view, cx, cy, initialRadius, finalRadius);
    anim.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            listener.onRevealHide();
            view.setVisibility(View.INVISIBLE);
        }

        @Override
        public void onAnimationStart(Animator animation) {
            super.onAnimationStart(animation);
            view.setBackgroundColor(context.getResources().getColor(color));
        }
    });

    anim.setDuration(300);
    anim.start();
}

public static void animateRevealShow(final Context context, final View view,  final int startRadius, final @ColorRes int color, int x, int y, final OnRevealAnimationListener listener) {

    float finalRadius = (float) Math.hypot(view.getWidth(), view.getHeight());
    Animator anim =
            ViewAnimationUtils.createCircularReveal(view, x, y, startRadius, finalRadius);
    anim.setDuration(300);
    anim.setStartDelay(100);
    anim.setInterpolator(new AccelerateDecelerateInterpolator());
    anim.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationStart(Animator animation) {
            super.onAnimationStart(animation);
            view.setBackgroundColor(context.getResources().getColor(color));
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            view.setVisibility(View.VISIBLE);
            listener.onRevealShow();
        }
    });
    anim.start();}}

OnRevealAnimationListener.java

 public interface OnRevealAnimationListener {
    void onRevealShow();
    void onRevealHide();}

and for the transition resource file : changebounds_with_arcmotion.xml

 <transitionSet 
   xmlns:android="http://ift.tt/nIICcg"
    android:duration="500"
    android:interpolator="@android:interpolator/linear_out_slow_in"
    >
    <changeBounds>
        <arcMotion
            android:maximumAngle="90"
            android:minimumHorizontalAngle="90"
            android:minimumVerticalAngle="0"/>
        </changeBounds>
    </transitionSet>

So how can fix this?

Thanks in advance.

asked 8 secs ago

Let's block ads! (Why?)



Android arc motion followed by a circular reveal

Aucun commentaire:

Enregistrer un commentaire