SharedElement ์ ํ ์์ ์ ์ํํ๊ธฐ ์ํด ์ต์ ํ๋ ์ค์ฝ ์ฝ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. Android LใM์์๋ ์ ์คํ๋์ง๋ง Android N์์๋ ์๋ชป๋ฉ๋๋ค.
๏ฟผ์ ํ ์
์ ํ ํ
Fresco์ ๋ฐ๋ชจ ์ฑ์ ์ฌ์ฉํ์ฌ ์ ํ ๋ถ๋ถ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค ์ ์์ต๋๊น?
activity_main.xml ๋ฐ activity_detail์๋ transitionName์ด ๋์ผํ SimpleDraweeView๊ฐ ๋์ผํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด DetailActivity์ onCreate ๋ฉ์๋์์:
๋ณดํธ๋ ๋ฌดํจ onCreate(์ ์ฅ๋ ์ธ์คํด์ค ์ํ ๋ฒ๋ค) {
getWindow().requestFeature(Window.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(์ ์ฅ๋ ์ธ์คํด์ค ์ํ);
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(์๋ก์ด View.OnClickListener() {
@์ฐ์ธํ๋ค
๊ณต๊ฐ ๋ฌดํจ onClick(View v) {
Toast.makeText(DetailActivity.this, "dsasa", Toast.LENGTH_LONG).show();
}
});
}
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์์ ์๋ํ์ง ์์ต๋๋ค. ์ ํ ์์ ๊ธฐ์ ๋ก๊ทธ๋ฅผ ์ถ๊ฐํ์ผ๋ฉฐ Android N์์๋ onTransitionStart ๋ฐ onTransitionEnd๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ง๋ง Android M ๋ฐ L์์๋ ์ ๋๋ก ์๋ํฉ๋๋ค.
์ ๋ ์ต์ ๋ฒ์ ์ Fresco ๋ผ์ด๋ธ๋ฌ๋ฆฌ com.facebook์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. fresco:fresco :0.14.1 with com.facebook. ํ๋ ์ค์ฝ:์ด๋ฏธ์ง ํ์ดํ๋ผ์ธ-okhttp3 :0.14.1
์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ธฐ ์ํด Picasso ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์๋๋ฆฌ์ค๋ ๋น์ทํฉ๋๋ค. gridView, gridItem์ ๋ค๋ฅธ Activity๋ก ์ด๋ํ์ง๋ง(์ด ๋ถ๋ถ์์๋ ๋ชจ๋ ๊ฒ์ด ์ ์์) ๋์๊ฐ๋ฉด ๋ค์ ์
๋ ฅํ์ง ์๊ณ ์ด๋ฏธ์ง๊ฐ ๊น๋ฐ์ด๊ณ ๋ค์ ๋ก๋๋ฉ๋๋ค(์๋ฆฌ ํ์์ ์ด๋ฏธ์ง๊ฐ ํ์๋์ง ์๊ฑฐ๋ ์ด์ ์ ์๋ ์ด๋ฏธ์ง๊ฐ ํ์๋์ง ์์). ์ด๋ฏธ ๋ก๋๋จ). ์ด๊ฒ์ Android N(7.0)์์๋ง ๋ฐ์ํฉ๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
Fresco์์ Picasso๋ก ์ ํํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ์ํ๊น๊ฒ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋์ค๋ ์ Android OS ๋ฒ์ ์์ ์๊ตฌํ๋ ๋งํผ ์์ฃผ ์ ์ง ๊ด๋ฆฌ๋์ง ์์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ 'needs-details'๋ก ์๋ชป ํ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ๋ฌธ์ ๋ Android 7.1.1(API ๋ ๋ฒจ 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);
}
}
๋๊ตฐ๊ฐ ๋ ๋์ ํด๊ฒฐ์ฑ ์ ์๊ณ ์๋ค๋ฉด ๊ณต์ ํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์๋ ํ์ธ์, ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง๋ง Android 7.1.1 API 25์์๋ง ๋ฐ์ํฉ๋๋ค.
๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ผ๋ฉด ๋งค์ฐ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ 7.x์ emu์์๋ ๋์ผํ์ง๋ง onWindowFocusChanged๋ฅผ ์ฌ์ฉํ์ฌ ๋ชฐ์ ํ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์๋ฃ๋๋ฉด ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง์ง๋ง ์ฆ์ ๋ค์ ํ์๋ฉ๋๋ค.
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. SimpleDraweeView๊ฐ ํฌํจ๋ View์์ requestLayout์ ํธ์ถํ๋ฉด ๊น๋ฐ์์ผ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์กฐ์ธ ๋ถํ๋๋ฆฝ๋๋ค
ํ๋ ํธ์ถ์ ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋์์ด ๋๋ค๋ฉด +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 onCreate ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ํธ์ถ ๋์ ํ๋์ ์ฝ๋๋ฅผ ๋ฃ์์ง๋ง ์ฑ๊ณตํ์ง ๋ชปํ์ต๋๋ค. ์ ํ์ ๋ฐํํ ํ์๋ ๊ณต์ ์์ ์ด๋ฏธ์ง๊ฐ ์ฌ์ ํ ํ์๋์ง ์์ต๋๋ค.
ํด๊ฒฐ์ฑ ์ ์ฐพ๋ ๋ฐ ๋์์ด ๋ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ํํธํค๋ณด๋๋ฅผ ์ด๋ฉด SimpleDraweeView๊ฐ ํ์๋ฉ๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์๊ณ ์ด ๋ ๋ฒ์ ํธ์ถ ํ์ ์์ ๋์์ต๋๋ค.
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));
}
}
}
});
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 ์ด์ ๋ํ ์
๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ์์ง ๊ณ ์ณ์ง์ง ์์ ๊ฒ์ด ์์ฝ์ต๋๋ค.
๊ณต์ ์์๊ฐ RecyclerView
์์ ํญ๋ชฉ์ธ ๊ฒฝ์ฐ API 24+์์ ์ฌ์ ํ ์ด๊ฒ์ ๊ฒฝํํ๊ณ ์์ต๋๋ค.
์ด ํฐ์ผ์ ๋์ด๋ ํด๊ฒฐ ๋ฐฉ๋ฒ ์ค ์ด๋ ๊ฒ๋ ํจ๊ณผ๊ฐ ์์์ต๋๋ค(๋ณด๊ธฐ๊ฐ ์ฒ์๋ถํฐ ๋ณด์ด์ง ์์/์ฌ๋ผ์ง์ผ๋ก ์ค์ ๋์ง ์์).
Enter ๋ฐ Return ์ ํ ๋ชจ๋์ DraweeTransition.createTransitionSet()
๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ฆฌ์ฌ์ดํด๋ฌ ๋ทฐ๊ฐ ์คํฌ๋กค๋ ๋๊น์ง ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๋ ์๊ณ ์ ์ ํ ๊น๋ฐ๊ฑฐ๋ฆฌ๋ฉด์ ๋ค์ ๋ํ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค(notifyDataSetChanged() ํธ์ถ๋ก ์ธํ ๊ฒ์ผ ์ ์์).
์ด๊ฒ์ด ๋์์ด ๋ ์ง ํ์คํ์ง ์์ง๋ง ๋ ๋ฒ์งธ ํ๋์ด ๋ซํ๊ณ ๊ณต์ ์์๊ฐ ํด๋น ์์น๋ก ๋์๊ฐ ๋ ๋ก๊ทธ์ ๋ฐ๋ผ Fresco์์ ์ผ์ด๋๋ ์ผ์ ๋๋ค.
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 ์ฒซ ๋ฒ์งธ ํ๋์ผ๋ก ๋์๊ฐ ๋(recyclerView ์ฌ์ฉ). ํญ์ notifyDataSetChanged()๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๊น?
@erikandre ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค ;)
๋ช ๊ฐ์ง ํ
์คํธ ํ์ ๋นํธ๋งต์ด ์์ฒด์ ์ผ๋ก ํ์๋๋ ๊ฒฝ์ฐ์๋ notifyDataSetChanged()๊ฐ ํธ์ถ๋์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
ํธ์ถ ํ๋์์ 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}}}
๋ณด๊ธฐ ์์ฒด๊ฐ RecyclerView
์์ ๋ SimpleDraweeView
์ doDetach()
๋ฐ doAttach()
๋ฉ์๋์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ด๊ฒ์ ๋งค์ฐ ๊นจ๋ํ์ง๋ ์์ง๋ง ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค(์ ํ์ด ์์ฑ๋๋ ํ๋์ ์ถ๊ฐ๋จ).
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 ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. Android 7์ Genymotion์์ ์คํ๋๋ Showcase ์ฑ์์ ์ด ํน์ ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ค๊ณ ํ์ง๋ง ์ด์ด ์์์ต๋๋ค.
๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ์์ดํ ๋ทฐ๋ ์ด๋ค ๋ชจ์ต์ธ๊ฐ์? ์ ๊ฒฝ์ฐ์๋ SimpleDraweeView๋ฅผ ๋ํํ๋ FrameLayout์ด์์ต๋๋ค.
@marcosalis ๊ทํ์ ์๋ฃจ์ ์ ์ฝ๊ฐ์ ๋ณ๊ฒฝ์ผ๋ก ์ ์๊ฒ
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();
}
}
);
์ํธ ํ๋ ์ ํ์ ๊ฐ์ง๊ณ ๋ ธ๋ ๋์ ๋์ผํ ๋ฌธ์ ๋ฅผ ์ฐ์ฐํ ๋ฐ๊ฒฌํ์ต๋๋ค. ์์์ ์ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ ์ค ์ด๋ ๊ฒ๋ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. (API 25) ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://vimeo.com/225497240
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ๋ฉฐ ๊ณง ์์ ์ฌํญ์ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ dc7ec2436fc9b639fe1a39398712c360b16da468์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ง๊ธ์ simpleDraweeView.setLegacyVisibilityHandlingEnabled(true);
๋ฅผ ํธ์ถํ์ฌ ๋ ๊ฑฐ์ ๊ฐ์์ฑ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํ์ด ์์๋๋ ์ฒซ ๋ฒ์งธ DraweeView
๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค(Showcase ์ํ ์ฑ์ ์ ํ ์์ ์์ ๋ณผ ์ ์์). .
์ด๊ฒ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ํ์ธํด ์ฃผ์๊ฒ ์ต๋๊น? ์ด ์์ ์ฌํญ์ด ํฌํจ๋ ์๋ก์ด Fresco ๋ฒ์ ์ ๊ณง ์ถ์ํ ์์ ์ ๋๋ค.
๋ค, ๊ฐ์ฌํฉ๋๋ค! ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋จ์ ํ์ธํ์ต๋๋ค. ์ ๋ฐ์ดํธ๋ ๋ฒ์ ์ ๊ธฐ๋ํฉ๋๋ค.
์์์ ์ธ๊ธํ ์์ ์ฌํญ์ด ํฌํจ๋ Fresco v1.4.0์ ์ถ์ํ์ต๋๋ค. simpleDraweeView.setLegacyVisibilityHandlingEnabled(true);
ํธ์ถํ๋ฉด ์ด์ ์๋ํฉ๋๋ค.
๋ํ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋๋ก Showcase ์ ํ ์ํ ์ ์ ๋ฐ์ดํธํ์ต๋๋ค.
์ด ์์ ๋๋ถ์ ์ ๊ฒฝ์ฐ์๋ ์๋ฒฝํ๊ฒ ์๋ํ์ต๋๋ค. ํ ๊ฐ์ง ์ง๋ฌธ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก setGlobalLegacyVisibilityHandlingEnabled
๋ฅผ true
์ ๋ฃ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
Android N์์ ๊ฐ์์ฑ ์ฒ๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋์์ผ๋ฉฐ ๋ด ๋ณ๊ฒฝ ์ฌํญ์ (์ผ์ข
์) ๋์์ N ์ด์ ์ผ๋ก ๋๋๋ฆฌ๋ ๊ฒ์
๋๋ค. ๋ชจ๋ ์ด๋ฏธ์ง์ ๋ํด ์ด ๋์์ ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ์๊ธฐ์น ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์์ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋์์ ์ค์ ํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋ถ์์ฉ์ด ์๋ ๊ฒ์ผ๋ก ํ์ธ๋๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ๋ ๊ฒ์ ๊ณ ๋ คํ ๊ฒ์
๋๋ค.
์์ ๋กญ๊ฒ true
ํ๊ณ ๋ฐ์ํ ๋ฌธ์ ๋ฅผ ๋ค์ ๋ณด๊ณ ํ์ธ์.
์ด ์์ ์ ๋ฌด์์๋ก ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. setGlobalLegacyVisibilityHandlingEnabled๋ฅผ true๋ก ์ค์ ํ๊ณ ์์ง๋ง ๋ช ๋ฒ ํด๋ฆญํ๋ฉด ๋ฐํ๋ ์ด๋ฏธ์ง๊ฐ ๋น์ด ์์ต๋๋ค.
ํ๋ ์ค์ฝ 1.5.0, ์ค๋ ์ค
ํธ์ง: ๋ฉฐ์น ๋ ๊ฐ๋ฐํ๊ณ ์ผ๋ถ ๋ณด๊ธฐ๋ฅผ ์ด๋ํ ํ ๋ด Oreo ํฝ์ ์ฅ์น์์ ๋ ์ด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์๋ฎฌ๋ ์ดํธ๋ Nexus 5x API 24์์ ์ด๋ฏธ์ง๋ ์ข ๋ฃ ์ ๋๋ฉ์ด์ ํ์ ํญ์ ๋น์ด ์์ต๋๋ค.
setLegacyVisibilityHandlingEnabled
์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. true
์ค์ ํ๋ฉด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์๋ํ์ง๋ง ๋๋ก๋ ๋ฌด์์๋ก ๋ฐํ ์ ํ ํ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋๋ค.
@marcosalis ๋ Oreo ๋๋ Nougat์์๋ง ๋ฐ์ํฉ๋๊น?
์๋ ํ์ธ์ @oprisnik ์ ๋ Samsung S7(Nougat)๊ณผ API 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์ด View ๊ฐ์์ฑ ๋์์ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ์์ ํ๊ธฐ ๊น๋ค๋กญ์ต๋๋ค. ์ด ๋์์ Fresco์ ๊ฐ์์ฑ ์ฒ๋ฆฌ(๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํ์ํจ)๋ฅผ ๊นจ๋จ๋ฆฌ๊ณ ์ ๋ ๊ฐ๊น์ด ์ฅ๋์ ์ด์ ๋ํด ์กฐ์ฌํ ์๊ฐ์ด ๋ง์ง ์์ ๊ฒ์ ๋๋ค. . ๊ทธ๋ฌ๋ ์ด ์ค๋ ๋์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ช ๊ฐ์ง ๋์์ด ์ธ๊ธ๋์ด ์์ต๋๋ค(์: ๊ฐ์์ฑ์ ์๋์ผ๋ก ์ค์ ํ๋ @MartB ์ ํด๊ฒฐ ๋ฐฉ๋ฒ).
๋๊ตฐ๊ฐ ์ด๊ฒ์ ์กฐ์ฌํ๊ณ ์ถ๋ค๋ฉด pull reuqests๋ฅผ ์ธ์ ๋ ํ์ํฉ๋๋ค! :)
@oprisnik , react-native-maps
๋ชจ๋๋ ์ด ๋ฌธ์ ์ ์ํฅ์ ๋ฐ์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์ด ์ค ์ RootDrawable.java ํ์ผ์ ์ฃผ์์ผ๋ก ํ์ํ์ต๋๋ค.
ํด๋น ์ค์ ์ฃผ์ ์ค๋ก ํ์ํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ํฐ ๋ฌธ์ ๋ฅผ ๊ธฐ์ต/์๊ณ ์์ต๋๊น?
@efkan ๊ณผ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ง์ ์์ Android ๊ธฐ๊ธฐ(Android Nougat 7.1 API 25 ์ด์)์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
๊ทธ๋ค์ ์๋ฃจ์ ์ ๋ด๊ฐ ๊ฐ์ง ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
@efkan ์ ํํ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋์ฒด ์์ ์ฌํญ์ ์ฐพ์ ๋๋ ์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ์ง๋ง ๋ฌด์ํ๋ ๊ธฐ์ต์ด ์์ต๋๋ค. ์ด๋ฌํ ๊ฒ์ฌ๋ฅผ ์ ๊ฑฐํ ๋ ๋ฐ์ํ๋ ํ ๊ฐ์ง ๋ฌธ์ ๋ ๊ธฐ๋ณธ ๋นํธ๋งต์ด ํด์ ๋์ด(๋ณด๊ธฐ๊ฐ ๋ ์ด์ ํ์๋์ง ์๊ธฐ ๋๋ฌธ์) BitmapDrawable
๊ฐ ์คํ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆฌ๋ ค๊ณ ํ๋ฉด java.lang.RuntimeException: Canvas: trying to use a recycled bitmap ...
ํ๋ค๋ ๊ฒ์
๋๋ค. ์จ์ ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค.
ImageView
์์ฒด์ ๋๋ก์ด๋ธ์ ๋๋ก์ด๋ธ ๊ฐ์์ฑ์ ์ ๋๋ก ๋ณต์ํ์ง ๋ชปํ๋ ๋์ผํ ๋ฒ๊ทธ๊ฐ ์์ง๋ง ๋๋ถ๋ถ์ ๋๋ก์ด๋ธ์ด ๊ฐ์์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ์ง ์๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ์๋ํ๋ฉฐ ๊ธฐ๋ณธ ๋นํธ๋งต ์ฌ์ ํ ์ ํจํฉ๋๋ค.
@oprisnik ์ด ๋ชจ๋ ์ค๋ช ์
์ด๊ฒ์ด ์๋ํ๋์ง ํ
์คํธํ๊ธฐ ์ํด ์ด๊ฒ์ GenericDraweeHierarchyBuilder
์ค์ ์ผ๋ก ์ถ๊ฐํ๊ณ RootDrawable
( GenericDraweeHierarchy
์์ ์์ฑ๋จ)์ ๊ฐ์์ฑ ํ์ธ์ ๋ฌด์ํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค RootDrawable
, https://github.com/facebook/fresco/blob/master/drawee/src/main/java/com/facebook/drawee/generic/GenericDraweeHierarchy.java#L155 ์ฐธ์กฐ).
์ด ์ค์ ์ ์ถ๊ฐํ PR์ ์์ ๋กญ๊ฒ ์ ์ถํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ฑํํ๊ณ ๋ถ์์ฉ์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๋์ผํ ๋ฌธ์ ๋ Android 7.1(๋๋ ๊ทธ ์ด์)์ด ์ค์น๋ ๊ธฐ๊ธฐ์์๋ง ๋ํ๋ฉ๋๋ค.
์์ ์๋ฃจ์
์ค ์ด๋ ๊ฒ๋ ์๋ํ์ง ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ ๋คํธ์ํฌ๊ฐ 10kb/s๋ก ์ ํ๋ ๋ ํญ์ ๋ํ๋ฉ๋๋ค.
@babyblue1314 - ์์์ ์ธ๊ธํ RootDrawable
๋ณ๊ฒฝ์ผ๋ก๋ ํด๊ฒฐ๋์ง ์๋์?
@oprisnik ๋น ๋ฅธ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค!
Em...๊ทธ๋ ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์์ ์ธ๊ธํ RootDrawable ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก๋ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
์ ๊ฐ ์๋ชป ์ฌ์ฉํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
_ ๋คํธ์ํฌ๊ฐ 10kb/s๋ก ์ ํ๋๋ค๋ ์ ์ ์ธ๊ธํด์ผ ํฉ๋๋ค. _
๊ฒ๋ค๊ฐ ์๋์ ๊ฐ์ด ListView ๋ฟ๋ง ์๋๋ผ RecyclerView์ GridView์๋ ๋ํ๋ฉ๋๋ค.
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);
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);
_์ถ๊ฐ ์ ๋ณด๊ฐ ํ์ํ๋ฉด ์๋ ค์ฃผ์ธ์.
@babyblue1314 ๋์์์ด๋ ์ ํ ๊ด๋ จ ์ฝ๋์ ์ ํ์ด ํ์๋์ง ์์ต๋๋ค. ๊ฐ์ ๋ฌธ์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์๋ ๊ฒ์ด ํ์คํฉ๋๊น?
@oprisnik ์ฃ์กํฉ๋๋ค. ์ด ์ ํ ๋ฌธ์ ๊ฐ ์ ๋ฌธ์ ์ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋ฐฉ๊ธ ๊นจ๋ฌ์์ต๋๋ค.
ํ์์ด ๋์ ๋น์ทํด์ ๋ดค๋๋.....
์ ๋ฌธ์ ๋ฅผ ์์ํด์ผ ํฉ๋๊น?
@babyblue1314 ์, ์ด๊ฒ์ ๋งค์ฐ ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@oprisnik ๋ง์นจ๋ด ๋ด ๋ฌธ์ ์ ์์ธ์ ์ฐพ์์ต๋๋ค.
ํน์ ๋ค๋ฅธ ๋ถ๋ค์ด ์คํดํ์ค๊น๋ด ์ ๊ฐ ์ค๋ช
์ ๋๋ฆฌ๊ณ ์ ์์ต๋๋ค.
๋ด ๋ฌธ์ ๋ ์ฌ์ง ํ์๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
PNG ํ์์ผ๋ก imageRequestBuilder.setProgressiveRenderingEnabled(true)
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด ๋ฌธ์ ๊ฐ ํญ์ ์ฌํ๋ ์ ์์ต๋๋ค.
๋ฉ์๋๋ฅผ PNG ํ์์ผ๋ก imageRequestBuilder.setProgressiveRenderingEnabled(false)
๋ก ๋ณ๊ฒฝํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํฉ๋๋ค.
@oprisnik ๋ค์ ํ๋ฒ ๊ธฐ๋ค๋ ค์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค!
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ์ธ์...
Fresco 1.9.0์ ๋ฌธ์ ๋ฅผ ์ ๋๋ก ์์ ํ์ง ์์ต๋๋ค.
์ด ์ค๋ ๋์ ๋ช
์ ๋ฅผ ํผํฉํ๋ฉด ์ฅ์น์ ๋ฐ๋ผ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
setLegacyVisibilityHandlingEnabled
๋จ๋
๋ฐ onSharedElementEnd
ํด๊ฒฐ ๋ฐฉ๋ฒ ๋ชจ๋ ๋จ๋
์ผ๋ก ์๋ํฉ๋๋ค.onSharedElementEnd
ํด๊ฒฐ ๋ฐฉ๋ฒ๋ง ์๋ํฉ๋๋ค.๊ทธ๋์ ๋ด ์ฝ๋์์ ๋ ๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ฌ์ฉํ์ฌ ์ฝ๋์์ ์์ ํ๊ณ ๋ชจ๋ ๊ฒ์ ๋ค๋ฃจ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. @oprisnik ๋ฌธ์ ๋ฅผ ๋ ์ ์ดํดํ๊ธฐ ์ํด ์๊ฐ์ ํ ์ ํ๊ณ ์์ ์ฌํญ์ ์ฐพ์ผ๋ฉด PR์ ์ ์ถํ๊ฒ ์ต๋๋ค.
์, ๋ถํํ๋ ์ด ์ค๋ ๋์์ ์ธ๊ธํ ๋ชจ๋ ์๋ฃจ์ ์ด ์ด๋ค ์์ผ๋ก๋ ์คํจํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ์ ๋ํ ์ข์ ์์ ์ฌํญ์ด ์์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ผ๋ฉด ์๋ ค์ฃผ๊ฑฐ๋ PR์ ์ ์ถํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฌ์ ํ react-native-maps ๊ตฌ์ฑ ์์์ ๋ํ์ด ๋ฌธ์ ์
๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๊น?
๋ฌธ์ ๊ฐ ์ด๋์ ์๋์ง ์๊ณ ์์ต๋๊น?
๋ฌธ์ ๋ฅผ ์ ํํ ํ์ ํ๋ ๋ฐ ์ง์ ์ด ์์ต๋๊น? 4์ ์ดํ๋ก ์๋ฌด ์์๋ ๋ค๋ฆฌ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ฌ๊ธฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋ ์กฐ์ฌํ ์๊ฐ์ด ์์์ต๋๋ค. ์์ ๋กญ๊ฒ ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๊ณ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ์ธ์!
์์ ์ธ๊ธํ๋ฏ์ด ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ ImageView๊ฐ ์ ํ์์ ๋์์ฌ ๋ ๊ธฐ๋ณธ Drawable์ ๊ฐ์์ฑ์ ์ ๋๋ก ๋ณต์ํ์ง ๋ชปํ๋ Android ํ๋ ์์ํฌ ๋ฒ๊ทธ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์์ Android ๋ฒ๊ทธ ๋ณด๊ณ ์๋ฅผ ์ ์ถํ์ต๋๋ค. https://issuetracker.google.com/issues/111293868
๋ํ ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๋ (๋น ํ๋ ์ค์ฝ) ์ํ ์ฑ์ ๋ง๋ค์์ต๋๋ค. https://github.com/oprisnik/VisibilityPlayground
์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋์ง ์กฐ์ฌํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ Fresco๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํ๊ณ ์ฐ๋ฆฌ๋ Drawable ๊ฐ์์ฑ์ ์์กดํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ์์ฒญํ๋ฏ๋ก ์์์ ์ค๋ช ํ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ณด๋ค ๋ ๋์ ์์ ์ฌํญ์ด ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ๋ชจ๋ฅด๊ณ ํ๋ ์ค์ฝ๋ก ์ ํํ์ต๋๋ค. ๋๋ ์๋ง์ gif๋ฅผ ๋ ๋๋งํ๊ณ ํ๋ฅญํ๊ฒ ์ํํ์ง๋ง ํ์์ ์ํด ์ด๋ฌํ ์ ๋๋ฉ์ด์ ์ ์์กดํ๊ธฐ๋ ํฉ๋๋ค. ์์์ ์ธ๊ธํ ํต์ ์ฌ์ฉํ ์ ์์์ง๋ง ๋ฐํ ์ ๋๋ฉ์ด์ ์์ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋๋ค.
์ค์ ๋ก ๋ฌดํจํํ๊ฑฐ๋ View.setVisibility๊ฐ ๋๋ก์ด๋ธ์ ํ์ํ ์ ์์ต๋๋ค. Drawable.setVisible(true, true) ์ง์ ํธ์ถํด์ผ ํฉ๋๋ค.
A Activity#OnCreate์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ์ ์๋ํฉ๋๋ค.
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
์
๋๋ค.
์, ์ด๊ฒ์ View ๊ฐ์์ฑ(์ ํํ ImageView)์ด Drawable์ ์ ํ๋์ง ์๋ Android ํ๋ ์์ํฌ์ ๋ฒ๊ทธ์ด๋ฏ๋ก ์๋์ผ๋ก ๊ฐ์์ฑ์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ๋ ๋ง์ ๊ฐ์์ฑ์ ํ๋ณดํ ์ ์๋๋ก ์ฌ๊ธฐ์์ Android ๋ฒ๊ทธ ๋ณด๊ณ ์์ ๋ณํ๋ฅผ ํ์ ํ์ธ์ .
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ๋ ํธ์ถ์ ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋์์ด ๋๋ค๋ฉด +1!!! @oprisnik