๊ณต์ ์์ ์ ํ์ด ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
Android 5.0์ด ์ค์น๋ ๋ชจํ ๋ก๋ผ ๊ธฐ๊ธฐ์์ ํ ์คํธ๋จ
์์ธํ ๋ด์ฉ์ ์๋ ค ์ฃผ์๊ฒ ์ต๋๊น? ์ ํํ ๋ฌด์์ ํ๋ ค๊ณ ํ์ผ๋ฉฐ ๊ทธ ๋์ ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ์ต๋๊น?
์๋ก์ด Android ๋ฒ์ ์ธ lollipop์์๋ ImageView๋ฅผ ํ๋ ๊ฐ์ ๊ณต์ ์์ ์ ํ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ด๋ฏธ์ง๋ ํ ํ๋์์ ๋ค์ ํ๋์ผ๋ก ๋ถ๋๋ฝ๊ฒ ์ ํ๋ฉ๋๋ค. SimpleDraweeView๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฅ ์ฌ๋ผ์ง๋๋ค.
ํ ์คํธํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
์ฑ ํ ๋ง:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
</style>
Activity1 Layout.xml:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image"
android:layout_width="@dimen/size_1"
android:layout_height="@dimen/size_1"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
</RelativeLayout>
Activity2 Layout.xml:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image"
android:layout_width="@dimen/size_2"
android:layout_height="@dimen/size_2"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:transitionName="image_transition"/>
</RelativeLayout>
๋ ๋ฒ์งธ ํ๋์ ์์ํ๋ ์ฝ๋:
Intent intent = new Intent(activity1, Activity2.class);
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(activity1, simpleDraweeView1, "image_transition");
activity1.startActivity(intent, options.toBundle());
์ด ์ฝ๋๋ ์ด๋ฏธ์ง๊ฐ ํ๋ 1์ ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ์์ ํ๋ 2์ ์ค๋ฅธ์ชฝ ํ๋จ ๋ชจ์๋ฆฌ๋ก ์ด๋ํ๊ณ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ ํ๋ ์ฌ์ด๋ฅผ ์ ํํด์ผ ํฉ๋๋ค. ๋คํธ์ํฌ์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ์ ์ฌํ ์ฝ๋๋ฅผ ํ ์คํธํ์ง๋ง ํ์๋์ง ์์ต๋๋ค. ์ ๋๋ฉ์ด์ .
๋๋ ์ด๊ฒ์ด ๋๋ฌด ํ์ค์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค https://github.com/facebook/fresco/issues/99
๋๋ ์ด๊ฒ์ด ์ ํํ ๋ ๋ณด๊ธฐ๊ฐ ๊ฐ์ ธ์ค๋ ์ฐ๊ฒฐ/๋ถ๋ฆฌ ์ด๋ฒคํธ์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์กฐ์ฌํด์ผ ํฉ๋๋ค.
์ด๊ฒ๋ ํ์ธํ ์ ์๋ ๋ถ๋ถ์ ๋๋ค. Fresco์์ ๊ณต์ ์์ ์ ํ์ด ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ ์์ผ๋ก ๋์๊ฐ๋ ๋งค์ฐ ์ค์ํ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
๋์๊ฒ๋ ์ผ์ด๋ฌ๋ค. TranstitionName xml ์์ฑ์ SimpleDraweeView๋ก ์ค์ ํ ๋ setImageUri() ๋ฉ์๋๊ฐ ์๋์ ๋ฉ์ท์ต๋๋ค.
์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
FadeDrawable์ด ์ค์ ์ด๋ฏธ์ง๋ฅผ ์ ๋๋ฉ์ด์
ํํ ํ ๋ก๊ทธ๊ฐ ์์ต๋๋ค.
com.facebook.samples.comparison D/ViewRootImpl๏น changeCanvasOpacity: opaque=false
์๋ง๋ changeCanvasOpacity๋ก ์ธํด ์ด๋ฏธ์ง๊ฐ ๊ทธ๋ ค์ง์ง ์์ ์ ์์ต๋๋ค.
๋ฒ๊ทธ๊ฐ ์์ ๋์๋์? ์ ํ๋ก์ ํธ์๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. :)
ํจํค์ง org.goodev.droidddle.drawee;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.view.SimpleDraweeView;
import android.content.Context;
android.graphics.Matrix ๊ฐ์ ธ์ค๊ธฐ;
๊ฐ์ ธ์ค๊ธฐ android.util.AttributeSet;
๊ณต๊ฐ ํด๋์ค TranslateDraweeView ํ์ฅ SimpleDraweeView {
๊ณต๊ฐ TranslateDraweeView(์ปจํ
์คํธ ์ปจํ
์คํธ) {
์ํผ(์ปจํ
์คํธ);
}
public TranslateDraweeView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TranslateDraweeView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public TranslateDraweeView(Context context, GenericDraweeHierarchy hierarchy) {
super(context, hierarchy);
}
// looks like overwrite this method can fix this issue
// but still don't figure out why
public void animateTransform(Matrix matrix) {
invalidate();
}
}
@goodev ๋ฎ์ด ์ฐ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
@shumin0809 ์ด ๋ฐฉ๋ฒ์ ์ถ๊ฐํ๋ฉด ์ ํ์ ์ํ ๊ณต๊ฐ ์จ๊น ๋ฐฉ๋ฒ์ ๋๋ค.
SharedElementTransitions์์ ์ฌ์ ํ ๋ค๋ฅด์ง๋ง ์ฌ์ ํ ๋ฒ๊ทธ๊ฐ ์๋ ๋์์ ๋ณด๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ๋์ผํ ๋ฌธ์ ์ธ์ง, ๊ด๋ จ ๋ฌธ์ ์ธ์ง, ์๋๋ฉด ๋ณ๋์ ๋ฌธ์ ์ธ์ง ์ ์ ์์ต๋๋ค.
_ ๋ณต์ _
SharedElementTransition์ ๋ํ ๊ฝค ํ์ค์ ์ธ ์ค์ :
_ ์์ _
์ผ๋ฐ ImageView(scaleType ์ผ์น ์ ๊ณต)์ ๊ฒฝ์ฐ ํ๋๊ทธ๋จผํธ ๊ฐ ๊ณต์ ๋ฆฌ์์ค์ ์ํํ ์ ๋๋ฉ์ด์
_ ๊ด์ฐฐ _
SharedElementTransition์ด ๋ฐ์ํ์ง๋ง ๋์ ์ด๋ฏธ์ง๊ฐ ๋ํ๋๊ธฐ ์ ์ ๊น๋ฐ์์ด ์์ต๋๋ค(๋์ ์ด๋ฏธ์ง๊ฐ ์ถฉ๋ถํ ์ผ์ฐ ์ค์ ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค)
_ ์ฐธ๊ณ _
์น ๋ฐ ๋์คํฌ์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ค๊ณ ์๋ํ์ผ๋ฉฐ ์ ํ์ ์์ํ๊ธฐ ์ ์ ์ด๋ฏธ์ง๊ฐ ๋ก๋๋๊ณ ์บ์์ ์์ต๋๋ค. ๋์ ์กฐ๊ฐ์ ์ฝ๋๊ฐ ์ ํํ ๋์ผํ URI๋ฅผ ๊ฐ์ ธ์ค๊ณ ์์ต๋๋ค. ํ์ดํ๋ผ์ธ์ ์ง์ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ์ง๋ง(๊ทธ๋ฆฌ๊ณ ๋ง์ ๊ฒ์ ๋ฐฐ์ ์ง๋ง) ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ์ง ๋ชปํ์ต๋๋ค.
_Setup _
๊ธฐ๊ธฐ: Android 5.1.1(API 22)์ ์คํํ๋ Nexus 5 ๋ฐ Nexus 7(2013)
์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋๊ตฌ: fresco(0.5.0), Android Studio(1.3 Preview 3 EAP.0), compileSdk(22), ๋น๋ ๋๊ตฌ(22.0.1)
_ ์คํ _
์ด ๊ฒ์๋ฌผ์ ์์ฑํ๋ ๋์ ๊ด๋ จ์ฑ์ด ์์ ์ ์๋ 2๊ฐ์ง ์ฌํญ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
@jorgemf - ๊ฒ์๋ ์ฝ๋์ ํ๋ 1 ๋ ์ด์์์ ์ค์ ๋ ์ผ์นํ๋ transitionName ์์ฑ์ด ํ์ํ์ง ์์ต๋๊น? https://developer.android.com/training/material/animations.html
_ ๊ณต์ ์์๋ก ํ๋ ์์ _
...
4 - android:transitionName ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ ๋ ์ด์์์ ๊ณต์ ์์์ ๊ณตํต ์ด๋ฆ์ ํ ๋นํฉ๋๋ค.
๋ด ๋ฌธ์ ์ ๊ฒฝ์ฐ ์ ํ์ ์ฐ๊ธฐํด์ผ โโํ ์๋ ์์ต๋๋ค. ๋๋ ์ค๋ ์ด๊ฒ์ ๋ณผ ๊ฒ์ด๋ค:
http://www.androiddesignpatterns.com/2015/03/activity-postponed-shared-element-transitions-part3b.html
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ์๋ค. fresco 0.5.3 ๋ฐ SimpleDraweeView๋ฅผ ์ฌ์ฉํ์ฌ attr " android:transitionName "์ด ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ์ง ์์ต๋๋ค. ๋๊ตฌ๋ ์ง Fresco๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ถ ์๋ฃจ์ ์ ์๊ณ ์์ต๋๊น?
@jorgemf Activity1 Layout.xml์์ "android-background"๋ฅผ ์ค์ ํ๋ฉด ์๋ฒฝํ๊ฒ ์๋ํ์ง๋ ์์ง๋ง ์๋ํฉ๋๋ค.
๋ด ํ
์คํธ์์ ์ค์ ํ์ต๋๋ค. android:background= "@ android:color/transparent "
@LuizGadao ๋ฐฐ๊ฒฝ์ ์ค์ ํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ ์ด์ ์ ์๊ฒ ๋ฉ๋๋ค. ์ธํฐ๋ท์์ ๋ค์ด๋ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ํ๋ ๋งํผ ๋ฌด์๋ฏธํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ์ ๋ฆฌ์์ค๋ฅผ ๋ฐฐ๊ฒฝ์ผ๋ก ์ฌ์ฉํ์ง ์์ต๋๋ค.
์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ
์คํธํ ํ Picasso๊ฐ ์ ์๋ํฉ๋๋ค. ์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
@jorgemf ๋์ํฉ๋๋ค. ๊ทธ๊ฒ์ ์๋์์ํ ํดํน ์ผ๋ฟ์ ๋๋ค.
์ด๊ฒ์ ๋ํ ์์์ด ์์ต๋๊น?
@LuizGadao ํด๊ฒฐ ๋ฐฉ๋ฒ XML์ ์๋ฅผ ๊ฒ์ํ ์ ์์ต๋๊น?
์ด ๋ฌธ์ ๋ฅผ ์ ๊ณ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ํดํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ํต์ฌ ํ์ ์๋ ธ์ต๋๋ค. ์์ผ๋ก 30์ผ ์ด๋ด์ ๋ต๋ณ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ํ ์์์ด ์์ต๋๊น?
์ถ์ :
@goodev์์ ์ ๊ณตํ๋ TranslateDraweeView๋ XiaoMi2, HuaWei P8๊ณผ ๊ฐ์ ์ผ๋ถ ์ฅ์น์์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์์ต๋๋ค. ReenterTransition์ด ์๋ชป๋ ์์น์์ ์์๋ฉ๋๋ค.
boxcounter๊ฐ ๋งํ๋ฏ์ด Tra slateDraweeView๋ HTC One M8์์๋ ์๋ํ์ง ์์ต๋๋ค.
ChangeImageTransform Transition์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ChangeImageTransform์ด ๊ธฐ๋ณธ์ ์ผ๋ก DraweeView๋ฅผ ์ง์ํ์ง ์๋๋ค๊ณ ์๊ฐํ๋ ImageView์ Matrix์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ณต์ ์์ ์ ํ์ด ์คํจํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ๋ง๋ ๋ฌธ์ ๋ ๊ณต์ ์์๊ฐ ์๋ "centerCrop"์ธ ๋์ "fitCenter"๋ก ์์ํ๋ค๋ ๊ฒ์
๋๋ค.
ํ๋ก์ ํธ์์ ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์
https://github.com/JackFan-Z/ActivitySharedElementTransition.git
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ง๋ง
ํ๋ ์ค์ฝ๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๊ฐ์ธ ํ๋ก์ ํธ์์๋ ์๋ํ์ง ์์ต๋๋ค.
๋๊ตฐ๊ฐ ์ง์ง ๋ฌธ์ ๊ฐ ์ด๋์ ์๋์ง ์์๋ผ ์ ์์ต๋๊น?
์๋ชป๋ ์ ํ ์์ ์ํ
์ ํ ์
@JackFan-Z
์ ํ์ ์์ ๊ณต์ ๋ ์ต์ข
๋ณด๊ธฐ๋ฅผ ์ด๊ธฐ ๊ฐ์ผ๋ก ์ค์ ํ๊ณ ์ต์ข
๊ฐ์ผ๋ก ์ ๋๋ฉ์ด์
ํฉ๋๋ค.
ChangeImageTransform
์ ๊ฒฐํฉ๋ ์ผ๋ฐ ImageView๋ ์ด๋ฏธ์ง ๋งคํธ๋ฆญ์ค์ ์์ ๋ฐ ๋ ๊ฐ์ ์บก์ฒํ ๋ค์ ์ด๋ฏธ์ง ๋งคํธ๋ฆญ์ค ๋ณ๊ฒฝ์ ์ ๋๋ฉ์ด์
์ ์ ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋ DraweeView
๋ ์ด๋ฏธ์ง ๋งคํธ๋ฆญ์ค์ ๊ด๋ จ๋ ํน์ ๊ธฐ๋ฅ์ ์ฌ์ ์ํ๋ฏ๋ก ChangeImageTransform
๋ ์ด๋ฏธ์ง์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ฒฐ๊ตญ ChangeBounds๋ง ์ ์ฉ๋ฉ๋๋ค.
ํ์ฌ DraweeView์ ์ด๋ฏธ์ง ๋งคํธ๋ฆญ์ค๋ฅผ ์กฐ์ํ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. setActualImageMatrix
๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์๋์์ต๋๋ค. ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ๊ธฐ๋ณธ ImageView์ ๊ธฐ๋ณธ setImageMatrix
์ฒ๋ผ ์ ํํ๊ฒ ์๋ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ DraweeViewHierarchy
์ค์ ํ ํ ํ๋ ฌ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ๋๋ฉ์ด์
์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋งค์ฐ ๋ถํธํฉ๋๋ค. ๋ฐ๋ผ์ onAnimationUpdate
ํธ์ถ๋ง๋ค ์๋ก์ด DraweeViewHierarchy
๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
DraweeView๊ฐ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฌ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ
์ ๊ธฐ๋ณธ Bitmap์ ๋๋๋ฆฌ๊ณ ChangeImageTransform
์ ํ์ ์ํํ๊ธฐ ์ํด ๋ค๋ฅธ ImageView๋ฅผ ๋ง๋๋ ๊ฒ์
๋๋ค.
@soapsign
๊ทํ์ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ค์ ๋ก ๋ด ๊ฐ์ธ ํ๋ก์ ํธ์์ ๊ณต์ ์์์ ๋์ผํ ๋นํธ๋งต์ ์ฌ์ฉํ๋ ๋๋ฏธ ImageView๋ฅผ ๋ง๋ค๋ ค๊ณ ํ์ต๋๋ค. ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค.
๋ด๊ฐ ์ง๋ฉดํ ๋ฌธ์ ๊ฐ ํ๋ ์ค์ฝ์ ๊ด๋ จ์ด ์๋์ง ์ฌ๋ถ๋ ํ์คํ์ง ์์ต๋๋ค.
ํ์ง๋ง SimpleDraweeView๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ์ฌํํ ์ ์๋ค๋ ๊ฒ์ ํ์คํฉ๋๋ค.
ChangeImageTransform
๋ ๊ณ ์ ์ฐจ์์ ์ฌ์ฉํ์ฌ ๋ณํ ํ๋ ฌ์ ๊ฒฐ์ ํฉ๋๋ค. DraweeView
์ ๊ตฌํ์ width
๋ฐ height
๋ํด -1๊ณผ ๋์ผํ ๊ณ ์ ์น์๋ฅผ ๊ฐ๋ DraweeHierarchy
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ Drawee
์ด๋ฏธ ์ฌ๋ฐ๋ฅธ ์ค์ผ์ผ ์ ํ ์ค์ผ์ผ๋ง์ ์ ์ฉํ๋ฏ๋ก ๋ทฐ๊ฐ ๊ทธ๋ ๊ฒ ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ํ ImageView
๋ ํ๋์ ์ถ์ฒ ์ ํ๋ง ์ ์ฉํ ์ ์๋ ๋ฐ๋ฉด ๋๋ก์ด๋ธ ๊ณ์ธต์ ๊ฐ ์ด๋ฏธ์ง ๋ถ๊ธฐ(์๋ฆฌ ํ์์, ์คํจ ์ด๋ฏธ์ง, ์ค์ ์ด๋ฏธ์ง ๋ฑ)์ ๋ํด ๋ณ๋์ ์ถ์ฒ ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ทฐ์ ์ค์ ๊ณ ์ ์น์๋ฅผ ๋ฐํํ๋ฉด ํฌ๊ธฐ ์กฐ์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ํ์ด ์์ต๋๋ค.
์ ํ ์์
์ ์ํ๋ฉด ChangeBounds
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
" fresco:ImageMatrixSrc=actual "๊ณผ ๊ฐ์ ์ ์ต์ ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
@boxcounter ํ์ฌ ์ฐ๋ฆฌ๋ ์ง๊ธ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ์ ์์ ๋ํ ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. :)
@massimocarli ChangeBounds๋ ๊ณต์ ์ด๋ฏธ์ง๊ฐ ๋ ํ๋/๋ณด๊ธฐ์์ ๋์ผํ ํฌ๊ธฐ์ผ ๋๋ง ์ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ํ ์ค์ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ฏธ์ง๊ฐ ์๋ ค์ ๋ณด๊ธฐ์ ์ข์ง ์์ต๋๋ค.
๊ทธ๋ฐ ์์ผ๋ก ๋ฌด์์ ์ ์ํฉ๋๊น? ChangeImageTransform์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง DraweeView์์๋ ์๋ํ์ง ์์ต๋๋ค.
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง...
@massimocarli ChangeBounds๊ฐ ์ถฉ๋ถํ์ง ์์ต๋๋ค.
์ด๊ฒ์ด ๋ด๊ฐ ๋ฌ์ฑํ๋ ค๋ ๊ฒ์ ๋๋ค(ImageView ์ฌ์ฉ): https://gfycat.com/HideousEarlyAndalusianhorse
์ด๊ฒ์ SimpleDraweeView๋ฅผ ์ฌ์ฉํ๋ ๋ชจ์ต์
๋๋ค: https://gfycat.com/PracticalCorruptGrouper
์ ๋๋ฉ์ด์
์ด๋ฏธ์ง ๋ค์์ ์๋ณธ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ ์๋ชป ์กฐ์ ๋๋ ๋ฐฉ์์ ์ ์ํ์ญ์์ค.
์ด๊ฒ์ด ๋ฐ๋ก ChangeBounds๋ฅผ ์ ํ์ผ๋ก ์ฌ์ฉํ์ ๋์ ๋ชจ์ต์ ๋๋ค. https://gfycat.com/SorrowfulExemplaryAntlion
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ChangeBounds๊ฐ ์ํํ๊ฒ ์๋ํ์ง ์์ต๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ ์์ ์ฌํญ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ญ์์ค. ๊ณต์ ์์ ์ ํ์ ๋จธํฐ๋ฆฌ์ผ ๋์์ธ์ด ๋์ ํ ์ต๊ณ ์ ๊ฒ ์ค ํ๋์ด๋ฉฐ ํ๋ ์ค์ฝ๋ ์ง๊ธ๊น์ง ์ฌ์ฉํ ๊ฐ์ฅ ํ๋ฅญํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ ๋ค ์ํํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ์ธ์.
Fresco๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ์์ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์๋ ์ฌ๋์ด ์์ต๋๊น?
๋ค์์ ์ ์๋ํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์
๋๋ค.
https://github.com/bumptech/glide
๋ชจ๋๋ค ์๋ ,
ChangeBounds ๋ฉ์๋ ์์ฒด๋ก๋ ์ถฉ๋ถํ์ง ์์ผ๋ฉฐ ๊ณต์ ์์ ์ ํ์ ํ์ฌ ์ํ๊ฐ ๊ด์ฐฎ๋ค๋ Facebook์ ๋ต๋ณ์ ๋๋์ต๋๋ค.
๋ง์นจ๋ด ์ํ ํ๋ก์ ํธ์์ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฐ๋จํ ์๋ฃจ์
์ ์ฐพ์์ต๋๋ค.
ChangeBounds ์ ํ์ onMeasure()๋ฅผ ํตํด ๋ ์ด์์ ์์ฒด๋ฅผ ์
๋ฐ์ดํธํ์ง ์๊ณ ํ์ฌ ์ด๋ค drawee ๋ณด๊ธฐ์ ์ํด ์ฌ์ ์๋์ง ์๋ onSizeChanged()๋ฅผ ํตํด ์
๋ฐ์ดํธ๋๊ธฐ ๋๋ฌธ์ ๋๋ก์ด๋ธ์ ๋ฐฐ์จ์ ์ ํ ์ค์ ์
๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
๋ค์์ ์ ํ ์ค์ TopLevelDrawable์ ์ ๋ฐ์ดํธํ๋ CustomDraweeView์ ๋๋ค.
public class CustomDraweeView extends SimpleDraweeView {
public CustomDraweeView(Context context, GenericDraweeHierarchy hierarchy) {
super(context, hierarchy);
}
public CustomDraweeView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
<strong i="10">@Override</strong>
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Drawable drawable = getTopLevelDrawable();
if (drawable != null) {
drawable.setBounds(0, 0, w, h);
}
}
}
ํ์ฅํด์ผ ํ๋ transitionset์ xml์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<?xml version="1.0" encoding="utf-8"?>
<transitionSet
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:duration="<strong i="14">@android</strong>:integer/config_mediumAnimTime"
android:transitionOrdering="together"
tools:targetApi="LOLLIPOP" >
<changeBounds
android:interpolator="<strong i="15">@android</strong>:interpolator/accelerate_decelerate"/>
<changeTransform
android:interpolator="<strong i="16">@android</strong>:interpolator/accelerate_decelerate"/>
</transitionSet>
์ด ๋ฐฉ๋ฒ์ ์ ์ผํ ๋จ์ ์ ๋๋ก์ด๋ธ์ ํฌ๊ธฐ ์ ํ์ด ์กฐ๊ฐ ๋๋ ํ๋ ๊ฐ์ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ณต์ ์์ ์ ํ์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ์ด๋ฅผ ํผํด์ผ ํฉ๋๋ค.
@massimocarli @tyronen
Facebook์ ๋๊ตฌ๋ ์ง DraweeView๊ฐ ํ์ฌ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ง ์๋ ์ด์ ์ ์ด ์์ ์ผ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๊ฐ๋ฅํ ๋ฌธ์ ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ ์ ์์ต๋๊น? ์๋ฌด ๊ฒ๋ ๋ฐ๊ฒฌ๋์ง ์์ผ๋ฉด ์ด์ ๋ํ ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ! ์๋ก์ด Fresco ๋ฆด๋ฆฌ์ค 0.10์์๋ ์๋ก ๋ค๋ฅธ ScaleType ๊ฐ์ ์ฌ์ฉ์ ์ง์ ScaleType ๋ณํ์ด ๊ฐ๋จํฉ๋๋ค. ์ฌ๊ธฐ ๋ด ๊ตฌํ์ด ์์ต๋๋ค
https://gist.github.com/burzumrus/a589aa7e36ca003ddaf2334218c50ad0
์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ๋ค
TransitionSet transitionSet = new TransitionSet();
transitionSet.addTransition(new ChangeBounds());
transitionSet.addTransition(new DraweeTransform(ScalingUtils.ScaleType.CENTER_CROP, ScalingUtils.ScaleType.FIT_CENTER));
getWindow().setSharedElementEnterTransition(transitionSet);
@burzumrus ๊ต์ฅํฉ๋๋ค! ๊ตฌํํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๊ฒ์ด ๋ฐ๋ก ๋ด๊ฐ InterpolatingScaleType
์์ ์ผ๋์ ๋์๋ ๊ฒ์
๋๋ค. ์์ง ์๋ฃ๋์ง ์์ ๊ฒฝ์ฐ Fresco์ ๋ํ ํ ๋ฆฌํ์คํธ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
@plamenko ์ ๋ fresco 0.12๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ
getWindow().setSharedElementEnterTransition(DraweeTransition.createTransitionSet(
ScalingUtils.ScaleType.CENTER_CROP, ScalingUtils.ScaleType.CENTER_CROP));
getWindow().setSharedElementEnterTransition(DraweeTransition.createTransitionSet(
ScalingUtils.ScaleType.CENTER_CROP, ScalingUtils.ScaleType.CENTER_CROP));
์ ๋๋ฉ์ด์ ์ด ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฒซ ๋ฒ์งธ ํ๋์ผ๋ก ๋์๊ฐ๋ฉด ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋๋ค.
์กฐ๊ฐ ๊ฐ ์ ๋๋ฉ์ด์
์ผ๋ก ์ด๊ฒ์ ์๋ํ ์ฌ๋์ด ์์ต๋๊น? v0.12์์๋ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ์ง : RecyclerView๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๊น?
ํธ์ง 2 : ๋ฌธ์ ๋ ๋ถ๋ชจ ์ฌ์ง์ ์ด true๋ก ์ค์ ๋ ๊ฒฝ์ฐ ChangeBounds
์์ฒด๊ฐ X ๋ฐ Y _window_ ์ขํ๋ง ์ฌ์ฉํ๋ค๋ ๊ฒ์
๋๋ค. ChangeBounds
์ setReparenting(true)
๋ฅผ ํตํด ์ค์ ํ๋ ๊ฒ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ๋์ ChangeTransform
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฐ๋ผ์ RecyclerView
๊ฒฝ์ฐ transitionSet.addTransition(new ChangeTransform());
๋ ํ์ํฉ๋๋ค. (๋ณต๊ทํ๋ ์ ๋๋ฉ์ด์
์ฌ์ ํ ๋์ ๋ณด์ด์ง๋ง ์ ์ด๋ ์ง์
์ ๋๋ฉ์ด์
์ค์ผ์ผ ํ์
์ด ๋ณํ์๋ ์ํฅ์ด์๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ (๊ด์ฐฎ startValues.view
๋ก endValues.view
์์ createAnimator(...)
๋ก ํด๊ฒฐํ ์ด๊ฒ์)๊ณผ๋ฅผ ์ด๊ฒ.)
@Gericop ๋ฐ @ladia12 0.12๋ ์กฐ๊ฐ ๊ฐ ์ ๋๋ฉ์ด์
์ ๋ด ํ๋ก์ ํธ์์ ์ ์๋ํฉ๋๋ค.
RecyclerView์์๋ ์ฌ์ฉํฉ๋๋ค.
๋ฌธ์ ๋ '๋ฐ๊พธ๊ธฐ' ํ๋๊ทธ๋จผํธ ํธ๋์ญ์
๋ง ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. '์ถ๊ฐ' ํธ๋์ญ์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋์์ด ๋ ์ ์๋ค๋ฉด ์ฌ๊ธฐ์ ์์
์ ์์ํ๋ ๋ฐ ๋์์ด ๋ ์กฐ๊ฐ ๊ฐ ์ ํ์ ์(ํ๋ ์ค์ฝ ์์)๊ฐ ์์ต๋๋ค(github์์ ํ๋ก์ ํธ ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์).
http://www.androidauthority.com/using-shared-element-transitions-activities-fragments-631996/
@sperochon ๋๋ replace๋ฅผ ์ฌ์ฉํ๊ณ RecyclerView์ ์์ง๋ง ์๋ํ์ง ์์ต๋๋ค. ์ ๋๋ฉ์ด์ ์ ์๋์ํค๋ ค๋ฉด ๋ช ๊ฐ์ง๋ฅผ ๋ณ๊ฒฝํด์ผ ํ์ต๋๋ค.
ChangeTransform
ํตํด ์ ์ด ์ธํธ transitionSet.addTransition(new ChangeTransform());
ChangeBounds
๊ฐ RecyclerView
์์ ์์ ๋ณด๊ธฐ์ ์๋ชป๋ ์์น๋ฅผ ๋ณด๊ณ ํ๊ธฐ ๋๋ฌธ์
๋๋ค(ํญ์ ์ฒซ ๋ฒ์งธ ์์์ X, Y ์ขํ๋ฅผ ๋ฐํํจ).createAnimator(...)
if (mFromScale == mToScale)
๋ฅผ if(mFromScale == mToScale && startBounds.equals(endBounds))
createAnimator(...)
final GenericDraweeView draweeView = (GenericDraweeView) startValues.view;
๋ฅผ final GenericDraweeView draweeView = (GenericDraweeView) endValues.view;
endValues
๋ฐ๊ฟ๋๋ค( startValues
-> endValues
๋ณ๊ฒฝ์ ์ฃผ์).scaleType.setValue(fraction)
ํธ์ถ ํ AnimatorUpdateListener
์์ ๋ค์ ์ค์ ์ฝ์
ํฉ๋๋ค.Drawable drawable = draweeView.getTopLevelDrawable();
if (drawable != null) {
drawable.setBounds(0, 0, draweeView.getWidth(), draweeView.getHeight());
}
์ด ๋ง์ง๋ง ์ฝ๋ ์กฐ๊ฐ์ @Aohayou ์ ์๋ฃจ์
์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค( CustomDraweeView
์๋์ํฌ ์ ์์๊ธฐ ๋๋ฌธ์).
lib ๋ฒ์ v24.1.1์ ์ง์ํ๋ Android 5.0.2์์ ์ด๊ฒ์ ํ
์คํธํ์ต๋๋ค.
์ด ์๋ฃจ์ ์ ๋์ผํ ํฌ๊ธฐ์ ์ด๋ฏธ์ง ์ฌ์ด์ ์ ๋๋ฉ์ด์ ์ํ์ง ์๋ํ๋์งํฉ๋๋ค.
@Gericop ๋ค์์ ์ ๋๋ก ์๋ํ๋ ๋ฐ๋ชจ์
๋๋ค. ๋ฐฉ๊ธ github์ ์ปค๋ฐํ์ต๋๋ค. ์ต๋ํ ์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ ค๊ณ ํ์ต๋๋ค. ์ฃผ์: Fresco๊ฐ ์๋ํ๋ ค๋ฉด ๋ฆฌ์ฌ์ดํด๋ฌ ๋ณด๊ธฐ์ ๊ฐ ํญ๋ชฉ์์ ์ ํ ์ด๋ฆ์ด ๋ฌ๋ผ์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์ฌ์ดํด๋ฌ ๋ณด๊ธฐ์์ 1๊ฐ์ ์ด๋ฏธ์ง๋ง ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋์ ๋จ์ํํ๊ธฐ ์ํด 1๊ฐ์ ์ ํ ์ด๋ฆ์ด ์๋ 1๊ฐ์ ์ด๋ฏธ์ง๋ง ์ฌ์ฉํ์ต๋๋ค.
https://github.com/sperochon/DemoFrescoFragment2Fragment
์ด ๋์์ ๋ฐ๋๋๋ค!
@sperochon ์ฌ๋ฌ ์ด๋ฏธ์ง๋ก ์๋ํด๋ณด์ธ์.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์์ ๋์ง ์์ ์์ค๋ก ๋ฐ๋ชจ๋ฅผ ํ
์คํธํ์ต๋๋ค. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ์์ ํ ์๋ชป๋ ๊ฒ์ ๋๋ค. ์๋ ๋ทฐ๋ ๋ค๋ฅธ ์์น์์ ์์๋๋ฉฐ ์ค์ผ์ผ ์ ํ์ ์ด๋ค ์ํฅ๋ ๋ฏธ์น์ง ์์ต๋๋ค. ๋ถ๋ช ํ ๊ทธ๋ ์ง ์๊ธฐ ๋๋ฌธ์ "์ ์๋ํฉ๋๋ค"๋ผ๊ณ ์ด๋ป๊ฒ ๋งํ ์ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@Gericop ๋ฐฉ๊ธ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ์ต๋๋ค. ๋ ์กฐ๊ฐ์ ๋ํด ๋ค๋ฅธ ๋ ์ด์์์ ์ง์ ํ๋ ๊ฒ์ ์์์ต๋๋ค. ๋ค์ ์๋ํด ์ฃผ์ธ์.
@sperochon API 23 ์๋ฎฌ๋ ์ดํฐ์์๋ ์ ์๋ํฉ๋๋ค. ๋ด ์ฅ์น(API 21)์์๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ํ API 21 ์๋ฎฌ๋ ์ดํฐ์์ ํ
์คํธํ์ง๋ง ์๋ํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์์ ์ ํ์ฌ ๊ตฌํ์ด API 21์์๋ ์๋ํ์ง ์์ง๋ง(API 22์์๋ ํ
์คํธํ์ง ์์) API 23์์๋ ์๋ํ๋ค๋ ๊ฒ์
๋๋ค.
ํธ์ง : ๋ฐ๋ชจ๋ ๊ธฐ๋ณธ ChangeBounds
๋ฐ ChangeTransform
์ ํ๋ง ํ
์คํธํ๊ณ Facebook์์ ์ ๊ณตํ DraweeTransition
๊ตฌํ์ ํ
์คํธํ์ง ์์ต๋๋ค.
๋ถํํ๋ ๋น์ ๋ง์ด ๋ง์์ต๋๋ค... ๋ด ๊ธฐ๊ธฐ์์ ํ
์คํธํ์ต๋๋ค.
์๋๋ก์ด๋ 5.0 + ํ๋ ์ค์ฝ v0.11/v0.12 -> KO
์๋๋ก์ด๋ 6.0 + ํ๋ ์ค์ฝ v0.11/v0.12 -> ํ์ธ
์ ์๋ ๋์น์ฑ์ง ๋ชปํ๋๋ฐ...
@Gericop @sperochon ์ด์ ๋ํด ๋งค์ฒด์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ์ ์์ฑํ์ต๋๋ค. ๋์์ด ๋๋์ง ํ์ธํ์ธ์.
@ladia12 ๊ทธ ๊ฒ์๋ฌผ์ ๋ด๊ฐ (์ฐ๋ฆฌ๊ฐ) ์ง๋ฉดํ๋ ๋ฌธ์ ์ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค... ๊ทํ์ ๋ธ๋ก๊ทธ ํญ๋ชฉ์ _inter- Activity _ transition์ ๊ดํ ๊ฒ์ด๊ณ , ์ ๋ฌธ์ ๋ _inter- Fragment _์ ๊ด๋ จ์ด ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์ค์ ๋ฒ๊ทธ๋ API 21์ด ChangeBounds
๋ฐ/๋๋ ChangeTransform
์ ํ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์์ต๋๋ค. Facebook์์ ์ ๊ณตํ DraweeTransition
๋ ๋์์ด ๋์ง ์์ต๋๋ค. ๋ฐ๋ฉด์ ๋ด ์๋ฃจ์
์ ์๋ณธ ์ด๋ฏธ์ง์ ๋์ ์ด๋ฏธ์ง์ ์น์(๋๋น ๋ฐ/๋๋ ๋์ด)๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ ์ด๋ฅผ ๊ทน๋ณตํฉ๋๋ค.
์ ๋ณด์ฉ:
์๋๋ก์ด๋ 5.0 + ํ๋ ์ค์ฝ v0.11/v0.12/0.13 -> KO
์๋๋ก์ด๋ >= 5.1 + ํ๋ ์ค์ฝ v0.11/0.12/0.13 -> ํ์ธ
@ladia12 ์ฒซ ํ๋ ๋ณต๊ท ์ ์๋ณธ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋ ๋ฌธ์ ๋ ์ด๋ป๊ฒ ํด๊ฒฐํ์ จ๋์?
@dbrant ์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ผ์ จ์ต๋๊น?
#1446 ์ฐธ์กฐ
@ladia12 ์ฒซ ํ๋ ๋ณต๊ท ์ ์๋ณธ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋ ๋ฌธ์ ๋ ์ด๋ป๊ฒ ํด๊ฒฐํ์ จ๋์?
@ladia12 ์ฒซ ํ๋ ๋ณต๊ท ์ ์๋ณธ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋ ๋ฌธ์ ๋ ์ด๋ป๊ฒ ํด๊ฒฐํ์ จ๋์? ๋ด ์๋ณธ ์ด๋ฏธ์ง๋ recyclerview์ ๋ทฐํ๋์ ์์ต๋๋ค.
๊ณต์ ์์ ์ ํ์ Picasso๋ฅผ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค. ๊ณ ์ณ์ง์ง ์์์ด
ํ๋ ์ค์ฝ์์. ๊ทธ๋์ ํผ์นด์๋ ๊ฐ๋ณ๊ณ ์ฌ์ฉํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค
ํ๋ ์ค์ฝ์ ํจ๊ป.
2019๋ 6์ 19์ผ ์์์ผ ์คํ 5:11 bembem1011 [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ต๋๋ค.
@ladia12 https://github.com/ladia12 ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐ ํ์ จ๋์ ?
์ฒซ ๋ฒ์งธ ํ๋์ผ๋ก ๋์๊ฐ ๋ ์๋ณธ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋์? ๋์
์๋ณธ ์ด๋ฏธ์ง๋ recyclerview์ ๋ทฐํ๋์ ์์ต๋๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/facebook/fresco/issues/22?email_source=notifications&email_token=AAXQ5WYUP5KBJYNBOZX7CCDP3ILM5A5CNFSM4A6ZMH32YY3PNVWWK3TUL52HS4DFVEXG43VMXHJ63LDNMV
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAXQ5W5EXO5SV4R2PXVTG7LP3ILM5ANCNFSM4A6ZMH3Q
.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค์์ ์ ์๋ํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค.
https://github.com/bumptech/glide