Fresco: рдПрдВрдбреНрд░реЙрдЗрдб рдПрди рдореЗрдВ SharedElementReturnTransition рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╢реЗрдпрд░ рддрддреНрд╡ рдЪрд▓рд╛ рдЧрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдЕрдЧре░ 2016  ┬╖  70рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/fresco

рдореИрдВ SharedElement Transition рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рдлрд╝реНрд░реЗрд╕реНрдХреЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВя╝М рдпрд╣ Android LуАБMя╝М рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдЪрд▓рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди Android N рдкрд░, рдпрд╣ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рд╕рдВрдХреНрд░рдордг рд╕реЗ рдкрд╣рд▓реЗ
screenshot0

рд╕рдВрдХреНрд░рдордг рдХреЗ рдмрд╛рдж
screenshot0

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреЙрд▓рд┐рдВрдЧ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдмрд╕ рдЗрд╕ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝реЗрдВя╝М+1 рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ !!! @oprisnik


setExitSharedElementCallback(new SharedElementCallback() {

            <strong i="6">@Override</strong>
            public void onSharedElementEnd(List<String> sharedElementNames,
                                           List<View> sharedElements,
                                           List<View> sharedElementSnapshots) {

                super.onSharedElementEnd(sharedElementNames, sharedElements,
                        sharedElementSnapshots);

                for (View view : sharedElements) {
                    if (view instanceof SimpleDraweeView) {
                        view.setVisibility(View.VISIBLE);
                    }
                }
            }
        });

рд╕рднреА 70 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдлреНрд░реЗрд╕реНрдХреЛ рдХреЗ рдбреЗрдореЛ рдРрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХреНрд░рдордг рднрд╛рдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

activity_main.xml рдФрд░ activity_detail рдореЗрдВ рд╕рдорд╛рди TransitionName рдХреЗ рд╕рд╛рде рд╕рдорд╛рди SimpleDraweeView рд╣реИ
рдФрд░ рдиреАрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ DetailActivity рдХреА onCreate рд╡рд┐рдзрд┐ рдореЗрдВ:

рд╕рдВрд░рдХреНрд╖рд┐рдд рд╢реВрдиреНрдп рдСрдирдХреНрд░реЗрдЯ (рдмрдВрдбрд▓ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕рд╕реНрдЯреЗрдЯ) {
getWindow ()ред рдЕрдиреБрд░реЛрдз рдлрд╝реАрдЪрд░ (рд╡рд┐рдВрдбреЛ.FEATURE_CONTENT_TRANSITIONS);
getWindow().setSharedElementEnterTransition(DraweeTransition.createTransitionSet(ScalingUtils.ScaleType.CENTER_CROP, ScalingUtils.ScaleType.FIT_CENTER));
getWindow().setSharedElementReturnTransition(DraweeTransition.createTransitionSet(ScalingUtils.ScaleType.FIT_CENTER, ScalingUtils.ScaleType.CENTER_CROP));
AddTransitionListener ();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
mBaselineJpegView = (SimpleDraweeView) findViewById(R.id.baseline_jpeg);
mBaselineJpegView.setImageURI(Uri.parse("https://www.gstatic.com/webp/gallery/1.sm.jpg"));
mBaselineJpegView.setOnClickListener (рдирдпрд╛ рд╡реНрдпреВ.рдСрдирдХреНрд▓рд┐рдХ рд▓рд┐рд╕реНрдЯрдирд░ () {
@ рдУрд╡рд░рд░рд╛рдЗрдб
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдСрдирдХреНрд▓рд┐рдХ (рджреЗрдЦреЗрдВ v) {
Toast.makeText(DetailActivity.this, "dsasa", Toast.LENGTH_LONG)ред рд╢реЛ ();
}
});
}

addTransitionListener () рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рд┐рд░реНрдл рд▓реЙрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ

рддреЛ рдХреНрдпрд╛ рдореИрдВ рд╕рдВрдХреНрд░рдордг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ?

рдРрд╕рд╛ рдореЗрд░реЗ рд╕рд╛рде рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ super.onCreate() рд╕реЗ рдкрд╣рд▓реЗ onCreate () рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ

supportRequestWindowFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Transition fade = new Fade();
fade.excludeTarget(android.R.id.statusBarBackground, true);
fade.excludeTarget(android.R.id.navigationBarBackground, true);
Window window = getWindow();
window.setEnterTransition(fade);
window.setReturnTransition(fade);
window.setExitTransition(fade);
TransitionSet transitionSet = DraweeTransition
                    .createTransitionSet(ScalingUtils.ScaleType.CENTER_CROP,
ScalingUtils.ScaleType.CENTER_CROP);
window.setSharedElementEnterTransition(transitionSet);
window.setSharedElementExitTransition(transitionSet);

рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред setSharedElementReturnTransition Android N рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рд╢реНрд░реЛрддрд╛рдУрдВ рдореЗрдВ рд▓реЙрдЧ рдЬреЛрдбрд╝реЗ рд╣реИрдВ рдФрд░ onTransitionStart рдФрд░ onTransitionEnd рдХреЛ Android N рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Android M & L рдкрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдлреНрд░реЗрд╕реНрдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА com.facebook рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдлреНрд░реЗрд╕реНрдХреЛ: рдлреНрд░реЗрд╕реНрдХреЛ : 0.14.1 com.facebook рдХреЗ рд╕рд╛рдеред рдлреНрд░реЗрд╕реНрдХреЛ:рдЗрдореЗрдЬрдкрд╛рдЗрдкрд▓рд╛рдЗрди-рдУрдХреЗhttp3 :0.14.1
рдЕрдЧрд░ рдореИрдВ рдЫрд╡рд┐ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдХрд╛рд╕реЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рдкрд░рд┐рджреГрд╢реНрдп рд╕рдорд╛рди рд╣реИ: рдЧреНрд░рд┐рдб рд╡реНрдпреВ, рдЧреНрд░рд┐рдбрдЗрдЯрдо рдХрд┐рд╕реА рдЕрдиреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕ рднрд╛рдЧ рдкрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ) рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рд╡рд╛рдкрд╕ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдХреЛрдИ рдкреБрди: рджрд░реНрдЬ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЫрд╡рд┐ рдЪрдордХрддреА рд╣реИ рдФрд░ рдкреБрдирдГ рд▓реЛрдб рд╣реЛрддреА рд╣реИ (рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдЫрд╡рд┐ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИ рдФрд░ рди рд╣реА рдЫрд╡рд┐ рдЬреЛ рдереА рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб)ред рдпрд╣ рдХреЗрд╡рд▓ Android N (7.0) рдкрд░ рд╣реЛрддрд╛ рд╣реИ

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдлреНрд░реЗрд╕реНрдХреЛ рд╕реЗ рдкрд┐рдХрд╛рд╕реЛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдмрд╣реБрдд рдмреБрд░рд╛ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирдП Android OS рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдиреА рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЙрддрдиреА рдмрд╛рд░ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ 'рдЬрд░реВрд░рддреЛрдВ-рд╡рд┐рд╡рд░рдг' рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ Android 7.1.1 (API level 25) рдкрд░ рднреА рдореМрдЬреВрдж рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗ

рдореБрдЭреЗ рднреА рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭрд╕реЗ +1 рдХрд░реЗрдВред

рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИ

рдХрд░ рджреЛред рдХрд░ рджреЛред ;-)

рд╣рд╛рдБ, рдХреГрдкрдпрд╛ рдХрд░реЗрдВред

рдХреГрдкрдпрд╛...

+1

рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрд╣ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ ..

+1

рдЬрдм рдореИрдВ onActivityReenter рдореЗрдВ рд╕рд╛рдЭрд╛ рддрддреНрд╡ рд╕реНрдерд┐рддрд┐ рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдЧрд╛рдпрдм рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдЖ рд░рд╣реА рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рд╕рдлреЗрдж рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рдХреЗ рд╕рд╛рде:

    <strong i="7">@Override</strong>
    public void onActivityReenter(int resultCode, Intent data) {
        super.onActivityReenter(resultCode, data);

        final int position = data.getIntExtra(EXTRA_GIF_POSITION, -1);
        if (resultCode == RESULT_OK && position != -1) {
            gifRecyclerView.getLayoutManager().scrollToPosition(position);
        }
    }

рдЕрдЧрд░ рдХреЛрдИ рдмреЗрд╣рддрд░ рдлрд┐рдХреНрд╕ рдЬрд╛рдирддрд╛ рд╣реИ рддреЛ рдореИрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реИрд▓реЛ, рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдВрдбреНрд░реЙрдЗрдб 7.1.1 рдПрдкреАрдЖрдИ 25 рдкрд░

рдЕрдЧрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ред

рдпрд╣рд╛рдВ рдЗрдореВ рдкрд░ 7.x рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд┐рдиреНрдбреЛрдлреЛрдХрд╕ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрдорд░реНрд╕рд┐рд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЫрд╡рд┐ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧреА рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред

рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИред SimpleDraweeView рд╡рд╛рд▓реЗ рджреГрд╢реНрдп рдкрд░ рдХреЙрд▓рд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рд▓рдпрдЖрдЙрдЯ рдЗрд╕реЗ рдХреБрдЫ рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗрдВ

рдХреЙрд▓рд┐рдВрдЧ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдмрд╕ рдЗрд╕ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝реЗрдВя╝М+1 рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ !!! @oprisnik


setExitSharedElementCallback(new SharedElementCallback() {

            <strong i="6">@Override</strong>
            public void onSharedElementEnd(List<String> sharedElementNames,
                                           List<View> sharedElements,
                                           List<View> sharedElementSnapshots) {

                super.onSharedElementEnd(sharedElementNames, sharedElements,
                        sharedElementSnapshots);

                for (View view : sharedElements) {
                    if (view instanceof SimpleDraweeView) {
                        view.setVisibility(View.VISIBLE);
                    }
                }
            }
        });

рдпрд╣рд╛рдБ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ... @antxyz рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдХреЛрдб рдХреЙрд▓рд┐рдВрдЧ рдФрд░ рдХреИрд▓реА рджреЛрдиреЛрдВ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХреНрд░рд┐рдПрдЯ рд╡рд┐рдзрд┐ рдкрд░ рдбрд╛рд▓рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдлрд▓рддрд╛ рдХреЗред рд╕рдВрдХреНрд░рдордг рд▓реМрдЯрдиреЗ рдХреЗ рдмрд╛рдж рднреА рд╕рд╛рдЭрд╛ рддрддреНрд╡ рдЫрд╡рд┐ рдЕрджреГрд╢реНрдп рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬрдм рд╕реЙрдлреНрдЯрдХреАрдмреЛрд░реНрдб рдЦреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ SimpleDraweeView рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереА рдФрд░ рдЗрд╕реЗ рдЗрди рджреЛ рдХреЙрд▓реЛрдВ рдХреЗ рдмрд╛рдж рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

  1. startActivity(... рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ:
    setExitSharedElementCallback(new SharedElementCallback() {
                <strong i="9">@Override</strong>
                public void onSharedElementEnd(List<String> names,
                                               List<View> elements,
                                               List<View> snapshots) {
                    super.onSharedElementEnd(names, elements, snapshots);
                    for (final View view : elements) {
                        if (view instanceof SimpleDraweeView) {
                            view.post(() -> view.setVisibility(View.VISIBLE));
                        }
                    }
                }
            });
  1. рдирдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ onCreate рдХреЗ рдЕрдВрджрд░:
setEnterSharedElementCallback(new SharedElementCallback() {
                <strong i="15">@Override</strong>
                public void onSharedElementEnd(List<String> names,
                                               List<View> elements,
                                               List<View> snapshots) {
                    super.onSharedElementEnd(names, elements, snapshots);
                    for (final View view : elements) {
                        if (view instanceof SimpleDraweeView) {
                            view.post(() -> view.setVisibility(View.VISIBLE));
                        }
                    }
                }
            });

@oprisnik рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдпрд╣ рдЕрдлрд╝рд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрднреА рддрдХ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореИрдВ рдЕрднреА рднреА рдПрдкреАрдЖрдИ 24+ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рд╕рд╛рдЭрд╛ рддрддреНрд╡ RecyclerView рдЕрдВрджрд░ рдПрдХ рдЖрдЗрдЯрдо рд╣реИред
рдЗрд╕ рдЯрд┐рдХрдЯ рдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рд╕реА рднреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ (рджреГрд╢реНрдп рдХрднреА рднреА рдЕрджреГрд╢реНрдп/рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдирд╣реАрдВ рдЧрдпрд╛)ред
рдореИрдВ рдкреНрд░рд╡реЗрд╢ рдФрд░ рд╡рд╛рдкрд╕реА рд╕рдВрдХреНрд░рдордг рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП DraweeTransition.createTransitionSet() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдХрднреА-рдХрднреА рдЫрд╡рд┐ рддрдм рддрдХ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкреБрдирд░реНрдЪрдХреНрд░рдг рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдпрд╣ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рдмрд╛рдж рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реВрдЪрдирд╛рдбреЗрдЯрд╛рд╕реЗрдЯ рдЪреЗрдВрдЬ () рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛ)ред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдлреНрд░реЗрд╕реНрдХреЛ рдореЗрдВ рд▓реЙрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрдм рджреВрд╕рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕рд╛рдЭрд╛ рддрддреНрд╡ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ:

V/unknown:AbstractDraweeController: controller c6a03e3 9: onDetach
V/unknown:AbstractDraweeController: controller c6a03e3 9: release: image: CloseableReferenceWithFinalizer f25d513
V/unknown:AbstractDraweeController: controller f84c24e 4: onAttach: request needs submit
V/unknown:AbstractDraweeController: controller f84c24e 4: set_final_result @ onNewResult: image: CloseableReferenceWithFinalizer f25d513

рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдмрд┐рдЯрдореИрдк рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм рдмрд┐рдЯрдореИрдк рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдВрддрд┐рдо рджреЛ рдШрдЯрдирд╛рдПрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ:

V/unknown:AbstractDraweeController: controller f84c24e 4: onAttach: request needs submit
V/unknown:AbstractDraweeController: controller f84c24e 4: set_final_result @ onNewResult: image: CloseableReferenceWithFinalizer f25d513

@marcosalis рдкрд╣рд▓реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд░ рд▓реМрдЯрдиреЗ рдкрд░ (рд░реАрд╕рд╛рдЗрдХреНрд▓рд░

@erikandre рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж;)
рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рдж, рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ InformDataSetChanged() рдХреЛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдмрд┐рдЯрдореИрдк рд╕реНрд╡рдпрдВ рд╣реА рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛред

рдЕрдЧрд░ рдореИрдВ рдХреЙрд▓рд┐рдВрдЧ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ SharedElementCallback.onSharedElementEnd() рдореЗрдВ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдбрд╛рд▓рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ SimpleDraweeView ред

 DraweeHolder{controllerAttached=false, holderAttached=true, drawableVisible=false}

PipelineDraweeController{super=PipelineDraweeController{isAttached=false, isRequestSubmitted=false, hasFetchFailed=false, fetchedImage=0, events=[...]}, dataSourceSupplier={request=ImageRequest{uri=https://OMITTED, cacheChoice=DEFAULT, decodeOptions=100-false-false-false-false-ARGB_8888-null, postprocessor=null, priority=HIGH, resizeOptions=null, rotationOptions=-1 defer:true, mediaVariations=null}}}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ doDetach() рдФрд░ doAttach() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде SimpleDraweeView , рдЬрдм рджреГрд╢реНрдп рд╕реНрд╡рдпрдВ RecyclerView ред
рдЕрдВрдд рдореЗрдВ, рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ (рдЙрд╕ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЬрд╣рд╛рдВ рд╕реЗ рд╕рдВрдХреНрд░рдордг рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмреЗрд╣рдж рд╕рд╛рдл рдирд╣реАрдВ рд╣реИ:

        setExitSharedElementCallback(new SharedElementCallback() {
            <strong i="11">@Override</strong>
            public void onSharedElementEnd(List<String> names, List<View> elements, List<View> snapshots) {
                for (View view : elements) {
                    if (view instanceof SimpleDraweeView) {
                        view.post(() -> {
                                myAdapter.notifyDataSetChanged();
                        });
                    }
                }
            }
        });

@marcosalis рдмрдврд╝рд┐рдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ! рдореИрдВрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб 7 рдХреЗ рд╕рд╛рде рдЬреЗрдирд┐рдореЛрд╢рди рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╢реЛрдХреЗрд╕ рдРрдк рдореЗрдВ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВред

рд░рд┐рд╕рд╛рдЗрдХрд▓рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП рдЖрдЗрдЯрдо рджреГрд╢реНрдп рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ? рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ SimpleDraweeView рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓рд╛ рд╕рд┐рд░реНрдл рдПрдХ FrameLayout рдерд╛ред

@marcosalis рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, for рдЪрдХреНрд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛:

setExitSharedElementCallback(
                    new SharedElementCallback() {
                        <strong i="7">@Override</strong>
                        public void onSharedElementEnd(List<String> names, List<View> elements, List<View> snapshots) {
                            super.onSharedElementEnd(names, elements, snapshots);
                            notifyDataSetChanged();
                        }
                    }
            );

рдЗрдВрдЯрд░-рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реБрдП рдореИрдВрдиреЗ рдмрд╕ рдЙрд╕реА рдореБрджреНрджреЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ рд╣реИред рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рдордХрд╛рдЬ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд╛рдо рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред (рдПрдкреАрдЖрдИ 25) рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ: https://vimeo.com/225497240

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдПрдХ рд╕рдорд╛рдзрд╛рди рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

рд╕рдорд╛рдзрд╛рди dc7ec2436fc9b639fe1a39398712c360b16da468 рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓рд╛ DraweeView рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рд╕реЗ рдЯреНрд░рд╛рдВрдЬрд┐рд╢рди рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ simpleDraweeView.setLegacyVisibilityHandlingEnabled(true); рдХреЙрд▓ рдХрд░рдХреЗ рд▓реАрдЧреЗрд╕реА рд╡рд┐рдЬрд┐рдмрд┐рд▓рд┐рдЯреА рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рд╢реЛрдХреЗрд╕ рд╕реИрдВрдкрд▓ рдРрдк рдореЗрдВ рдЯреНрд░рд╛рдВрдЬрд┐рд╢рди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ) .

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ? рд╣рдо рдПрдХ рдирдпрд╛ рдлрд╝реНрд░реЗрд╕реНрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рдЬрд▓реНрдж рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдБ, рдзрдиреНрдпрд╡рд╛рдж! рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЕрджреНрдпрддрди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВред

рд╣рдордиреЗ рдлрд╝реНрд░реЗрд╕реНрдХреЛ v1.4.0 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдКрдкрд░ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рд╕реБрдзрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рдмрд╕ simpleDraweeView.setLegacyVisibilityHandlingEnabled(true); рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдордиреЗ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЛрдХреЗрд╕ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдирдореВрдирд╛ рднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕рдиреЗ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХрджрдо рд╕рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ред рдПрдХ рдкреНрд░рд╢реНрди, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ setGlobalLegacyVisibilityHandlingEnabled рд╕реЗ true рдХреНрдпреЛрдВ рди рдбрд╛рд▓реЗрдВ? рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рд╣реИ?

рдПрдВрдбреНрд░реЙрдЗрдб рдПрди рдХреЗ рд╕рд╛рде рджреГрд╢реНрдпрддрд╛ рдкреНрд░рдмрдВрдзрди рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдкрд░рд┐рд╡рд░реНрддрди (рддрд░рд╣ рдХрд╛) рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреВрд░реНрд╡-рдПрди рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдЕрдиреНрдп рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд▓реЗрдВ рдХрд┐ рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдмреЗрдЭрд┐рдЭрдХ рдЗрд╕реЗ true рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВред

ezgif com-resize

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд┐рдХреНрд╕ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ setGlobalLegacyVisibilityHandlingEnabled рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдХреНрд▓рд┐рдХ рдХреЗ рдмрд╛рдж, рд▓реМрдЯрд╛рдИ рдЧрдИ рдЫрд╡рд┐ рдЦрд╛рд▓реА рд╣реИред

рдлреНрд░реЗрд╕реНрдХреЛ 1.5.0, рдУрд░рд┐рдпреЛ

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреБрдЫ рдФрд░ рджрд┐рдиреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рдж рдФрд░ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЗрдзрд░-рдЙрдзрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдУрд░реЗрдУ рдкрд┐рдХреНрд╕реЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдм рдФрд░ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореЗрд░реЗ рдПрдореНрдпреБрд▓реЗрдЯреЗрдб рдиреЗрдХреНрд╕рд╕ 5x рдПрдкреАрдЖрдИ 24 рдкрд░, рдПрдЧреНрдЬрд┐рдЯ рдПрдирд┐рдореЗрд╢рди рдХреЗ рдмрд╛рдж рдЗрдореЗрдЬ рд╣рдореЗрд╢рд╛ рдЦрд╛рд▓реА рд░рд╣рддреА рд╣реИред

рдореБрдЭреЗ setLegacyVisibilityHandlingEnabled рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдЗрд╕реЗ true рд╕реЗрдЯ рдХрд░рдирд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА, рдмрд╕ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ, рдЫрд╡рд┐ рд╡рд╛рдкрд╕реА рд╕рдВрдХреНрд░рдордг рдХреЗ рдмрд╛рдж рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред

@marcosalis рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдУрд░реЗрдУ рдпрд╛

рд╣рд╛рдп @oprisnik рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реИрдорд╕рдВрдЧ рдПрд╕ 7 (рдиреМрдЧрдЯ) рдФрд░ рдПрдкреАрдЖрдИ 26 рдкрд░ рдПрдХ рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдзрдиреНрдпрд╡рд╛рдж, рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдордп рд╣реЛрдЧрд╛ рддреЛ рдореИрдВ рд░рд┐рдкреНрд░реЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛

@oprisnik
рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдЕрдкрдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (API24 + API25)

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛:

        setExitSharedElementCallback(new SharedElementCallback() {
            <strong i="8">@Override</strong>
            public void onSharedElementEnd(List<String> names,
                                           List<View> elements,
                                           List<View> snapshots) {
                super.onSharedElementEnd(names, elements, snapshots);
                for (final View view : elements) {
                    if (view instanceof SimpleDraweeView) {
                        view.post(() -> {
                            view.setVisibility(View.VISIBLE);
                            view.requestLayout();
                        });
                    }
                }
            }
        });

рдореИрдВ рд░рд┐рдкреНрд░реЛ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред

рд╣реИрд▓реЛ @oprisnik ,
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

рдЕрднреА рддрдХ рдирд╣реАрдВ, рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Google рдиреЗ рджреГрд╢реНрдп рджреГрд╢реНрдпрддрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдлреНрд░реЗрд╕реНрдХреЛ рдХреА рджреГрд╢реНрдпрддрд╛ рдкреНрд░рдмрдВрдзрди (рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ) рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред . рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ @MartB рд╕реЗ

рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдкреБрди: рдЕрдиреБрд░реЛрдз рдХрд╛ рд╣рдореЗрд╢рд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! :)

@oprisnik , react-native-maps рдореЙрдбреНрдпреВрд▓ рднреА рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИред
рдореИрдВрдиреЗ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓ рдХреЗ рд░реВрдк рдореЗрдВ RootDrawable.java рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдпрд╛рдж рд╣реИ/рдкрддрд╛ рд╣реИ рдЬреЛ рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?

@efkan рдЬреИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рдиреЗ рд╕реЗ

рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд╕рднреА рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

@efkan рдореИрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрдзрд╛рд░реЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдерд╛, рддрдм рднреА рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдЪреЗрдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмрд┐рдЯрдореИрдк рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЪреВрдВрдХрд┐ рджреГрд╢реНрдп рдЕрдм рдФрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ) рдФрд░ рдЗрд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ java.lang.RuntimeException: Canvas: trying to use a recycled bitmap ... рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ BitmapDrawable рдХреЛрдИ рднреА рд╡рд┐рд╡реЗрдХ рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

ImageView рдореЗрдВ рд╡рд╣реА рдмрдЧ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдХрд┐рд╕реА рднреА рдбреНрд░реЙрдПрдмрд▓ рдХреА рдбреНрд░реЙрдПрдмрд▓ рджреГрд╢реНрдпрддрд╛ рдХреЛ рдареАрдХ рд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреНрд░реЙрдПрдмрд▓реНрд╕ рджреГрд╢реНрдпрддрд╛ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рдореИрдиреНрдпреБрдЕрд▓ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рд╣реИ - рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмрд┐рдЯрдореИрдк рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ред

рдЗрди рд╕рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП @oprisnik thanxред

рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ GenericDraweeHierarchyBuilder рдореЗрдВ рдПрдХ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ RootDrawable рдореЗрдВ рджреГрд╢реНрдпрддрд╛ рдЬрд╛рдВрдЪ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ (рдЬреЛ GenericDraweeHierarchy , рджреЗрдЦреЗрдВ https://github.com/facebook/fresco/blob/master/drawee/src/main/java/com/facebook/drawee/generic/GenericDraweeHierarchy.java#L155)ред

рдмреЗрдЭрд┐рдЭрдХ рдПрдХ рдкреАрдЖрд░ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХреЗрдВ рдФрд░ рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реИред

рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ Android 7.1 (рдпрд╛ рдКрдкрд░) рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рд╣рдореЗрд╢рд╛ рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдЬрдм рдиреЗрдЯрд╡рд░реНрдХ 10kb/s рддрдХ рд╕реАрдорд┐рдд рд╣реЛрддрд╛ рд╣реИред

@ babyblue1314 - рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд RootDrawable рдкрд░рд┐рд╡рд░реНрддрди рднреА рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

@oprisnik рдЖрдкрдХреЗ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдПрдо ... рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд░реВрдЯ рдбреНрд░рд╛рд╡реЗрдмрд▓ рдкрд░рд┐рд╡рд░реНрддрди рднреА рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЧрд▓рдд рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣рд╛рдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ:

рд░реВрдЯрдбреНрд░рд╛рдПрдмрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ:

RootDrawable рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж:

_ рдореБрдЭреЗ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ 10kb/s рддрдХ рд╕реАрдорд┐рдд рд╣реИред _
рдФрд░ рдХреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реИ, рдпрд╣ рди рдХреЗрд╡рд▓ ListView рдореЗрдВ рдмрд▓реНрдХрд┐ RecyclerView рдФрд░ GridView рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:

  1. ListViewAdapter (рдпрд╛ RecyclerViewAdapter рдпрд╛ GridViewAdapter):
SimpleDraweeView thumbnail = cholder.getView(R.id.thumbnail);

GenericDraweeHierarchyBuilder hierarchyBuilder = new GenericDraweeHierarchyBuilder(thumbnail.getContext().getResources());
GenericDraweeHierarchy hierarchy = hierarchyBuilder.build();
hierarchy.getTopLevelDrawable().setVisible(true, false);
thumbnail.setHierarchy(hierarchy);

ImageLoaderUtil.loadImage(thumbnail, item.getLogourl(), 696, 288);
  1. рдЫрд╡рд┐ рд▓реЛрдбрд░рдЙрдкрдпреЛрдЧ:
Uri uri = Uri.parse(url);
ImageRequestBuilder imageRequestBuilder = ImageRequestBuilder.newBuilderWithSource(uri);
imageRequestBuilder.setRotationOptions(RotationOptions.autoRotate()); 
imageRequestBuilder.setImageDecodeOptions(new ImageDecodeOptions(ImageDecodeOptions.newBuilder()
.setBitmapConfig(Bitmap.Config.RGB_565)));
imageRequestBuilder.setResizeOptions(new ResizeOptions(reqWidth, reqHeight));
ImageRequest imageRequest = imageRequestBuilder.build();

PipelineDraweeControllerBuilder draweeControllerBuilder = Fresco.newDraweeControllerBuilder();
draweeControllerBuilder.setOldController(simpleDraweeView.getController());
draweeControllerBuilder.setImageRequest(imageRequest);
draweeControllerBuilder.setTapToRetryEnabled(false); 

DraweeController draweeController = draweeControllerBuilder.build();
simpleDraweeView.setController(draweeController);

рдлреНрд░реЗрд╕реНрдХреЛ 1.5.0

рдбрд┐рд╡рд╛рдЗрд╕: рд▓реЗрдиреЛрд╡реЛ, рдПрдВрдбреНрд░реЙрдЗрдб 7.1.1

_рдЕрдЧрд░ рдЖрдкрдХреЛ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдП рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

@babyblue1314 рдореБрдЭреЗ рдЖрдкрдХреЗ рд╡реАрдбрд┐рдпреЛ рдпрд╛ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди-рд╕рдВрдмрдВрдзреА рдХреЛрдб рдореЗрдВ рдХреЛрдИ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдЖрдк рдЙрд╕реА рдореБрджреНрджреЗ рдкрд░ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@oprisnik рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рд╕рдВрдХреНрд░рдордг рд╕рдорд╕реНрдпрд╛ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЕрд▓рдЧ рд╣реИред
рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдШрдЯрдирд╛ рдореЗрд░реЗ рдЬреИрд╕реА рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдПтАжтАж
рдХреНрдпрд╛ рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@ babyblue1314 рд╣рд╛рдБ рдХреГрдкрдпрд╛, рдпрд╣ рдХрд╛рдлреА рдЕрд╕рдВрдмрдВрдзрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

@oprisnik рдореБрдЭреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдорд┐рд▓ рдЧрдпрд╛ред
рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдЧрд▓рддрдлрд╣рдореА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдпрд╣рд╛рдБ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдБред
рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЪрд┐рддреНрд░ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред
рдЕрдЧрд░ рдореИрдВ рдкреАрдПрдирдЬреА рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде imageRequestBuilder.setProgressiveRenderingEnabled(true) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рдореЗрд╢рд╛ рдкреБрди: рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЕрдЧрд░ рдореИрдВ рдкреАрдПрдирдЬреА рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХреЛ imageRequestBuilder.setProgressiveRenderingEnabled(false) рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@oprisnik рдЖрдкрдХреЗ рдзреИрд░реНрдп рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░реЗрдВ ...

рдлрд╝реНрд░реЗрд╕реНрдХреЛ 1.9.0 рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рддрд╛ рд╣реИ:

рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рджреЛрдиреЛрдВ рдХрд╛рдордХрд╛рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕рдмрдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИред @oprisnik рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп

рд╣рд╛рдБ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рднреА рд╕рдорд╛рдзрд╛рди рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, рдкреАрдЖрд░ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ :)

рдлрд┐рд░ рднреА, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рдорд╛рдирдЪрд┐рддреНрд░ рдШрдЯрдХ рдкрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдорд╡рд░реНрддреА рд╕рдорд╕реНрдпрд╛ рд╣реИ?
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдВ рд╣реИ?

рдореБрджреНрджреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐? рд▓рдЧрддрд╛ рд╣реИ рд╣рдордиреЗ рдЕрдкреНрд░реИрд▓ рдХреЗ рдмрд╛рдж рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЗрд╕ рдмрд╛рдд рдХреА рдФрд░ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдмреЗрдЭрд┐рдЭрдХ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ!

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛ рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдЧ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ ImageView рд╕рдВрдХреНрд░рдордг рд╕реЗ рд▓реМрдЯрдиреЗ рдкрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреНрд░рд╛рдпрдмрд▓ рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЛ рдареАрдХ рд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ Android рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рджрд░реНрдЬ рдХреА рд╣реИ: https://issuetracker.google.com/issues/111293868

рдореИрдВрдиреЗ рдПрдХ (рдЧреИрд░-рдлреНрд░реЗрд╕реНрдХреЛ) рдирдореВрдирд╛ рдРрдк рднреА рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ: https://github.com/oprisnik/VisibilityPlayground

рд╣рдо рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд╝реНрд░реЗрд╕реНрдХреЛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЫрд╡рд┐ рдХрд╛ рдкреБрди: рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рджреГрд╢реНрдпрддрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдлрд┐рдХреНрд╕ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдЕрд╡рдЧрдд рди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдлреНрд░реЗрд╕реНрдХреЛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред рдореИрдВ рдПрдХ рдЯрди gifs рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрди рдПрдирд┐рдореЗрд╢рди рдкрд░ рднреА рдирд┐рд░реНрднрд░ рд╣реВрдВред рдореИрдВ рдЙрдкрд░реНрдпреБрдХреНрдд рд╣реИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рдкрд╕реА рдПрдиреАрдореЗрд╢рди рдкрд░, рдЫрд╡рд┐ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧреАред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдорд╛рдиреНрдп рдпрд╛ View.setVisibility рдбреНрд░реЙрдПрдмрд▓ рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕реАрдзреЗ Drawable.setVisible(true, true) рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВ рдЗрди рдХреЛрдбреЛрдВ рдХреЛ рдП рдЧрддрд┐рд╡рд┐рдзрд┐ # рдСрдирдХреНрд░реЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

ActivityCompat.setExitSharedElementCallback(this, new SharedElementCallback() {
            <strong i="7">@Override</strong>
            public void onSharedElementEnd(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) {
                super.onSharedElementEnd(sharedElementNames, sharedElements, sharedElementSnapshots);
                if (FP.empty(sharedElements)) {
                    return;
                }
                for (View view : sharedElements) {
                    if (view instanceof SimpleDraweeView) {
                        ((SimpleDraweeView) view).getDrawable().setVisible(true, true);
                    }
                }
            }
        });

@oprisnik рдЕрдкрдиреЗ рдЧреИрд░-рдлрд╝реНрд░реЗрд╕реНрдХреЛ рдирдореВрдирд╛ рдРрдк рдореЗрдВ рдЖрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ ChangeBounds рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдмрдЧ рд╣реЛрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм ChangeImageTransform рдЪрд▓ рд░рд╣рд╛ рд╣реЛ рддреЛ рджреГрд╢реНрдпрддрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрд╣рд╛рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХреНрдпрд╛ ChangeImageTransform рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реНрд░реЗрд╕реНрдХреЛ рдЫрд╡рд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

@RainFool рд╕рд╣реА рд╣реИред simpleDraweeView.getVisibility() VISIBLE , рд▓реЗрдХрд┐рди simpleDraweeView.getDrawable().isVisible() false ред

рд╣рд╛рдВ, рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдЬрд╣рд╛рдВ рджреГрд╢реНрдп рджреГрд╢реНрдпрддрд╛ (рдЫрд╡рд┐ рджреГрд╢реНрдп рд╕рдЯреАрдХ рд╣реЛрдирд╛) рдбреНрд░рд╛рдпрдмрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рджреГрд╢реНрдпрддрд╛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреГрдкрдпрд╛ Android рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдпрд╣рд╛рдВ рддрд╛рд░рд╛рдВрдХрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рдЕрдзрд┐рдХ рджреГрд╢реНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛ: https://issuetracker.google.com/issues/111293868

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

liubaoyua picture liubaoyua  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

stevenmtang picture stevenmtang  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rafaelekol picture rafaelekol  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

eldk picture eldk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bigfreeZhou picture bigfreeZhou  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ