SlideShare a Scribd company logo
다음웹툰의 UX
함태윤(erkas.c)
DAUM WEBTOON COMPANY
Animation, Transition, CustomView
DAUM
WEBTOON
2.0
개선이 너무 잘 된 것 같습니다. 팝업 모션이 너무 좋아요!!! 댓글 스포일러 막는 것도 좋고
스크롤 내릴 때 캐릭터와 배경이 따로 분리되서 내려오는 것도 너무 좋아요 ㅠㅠ
진짜 매번 이걸로 웹툰 볼 때 느끼는 건데 깔끔하고 요일로 정리한 거랑 보려고 하는 웹툰
눌렀을 때? 웹툰이 올라오면서 켜지는거 너무 이뻐서 좋아요!! 솔직히 타 플랫폼은 비슷비슷한데
여긴 저렇게 깔끔하게 되어있어서 좋아요!!
다음웹툰도 즐겨보지만 UI가 매우 마음에 듭니다 개발자에게 전화를 걸었지만
모든 상담사가 통화중이라고 하더군요 혹시 개발자님과 이야기 하려면 어떻게 해야 하나요...?
다음웹툰의 UX(Animation, Transition, Custom View)
KEYWORD
INTERACTION
Creative
Natural
Focusing
Meaningful
INTERACTION
KEYWORD
PROCESS
WORK
DESIGN
PROTOTYPING
STEP 1
CONSULTATION
STEP 2
DEVELOPMENT
PROTOTYPING
STEP 3
REVIEW
STEP 4
OUTPUT
STEP 6
GO BACK
STEP 5
WORK
PROCESS
01.
HOME
INTERACTION
SPLASH
SYMBOLIC ICON
LIST ANIMATION
02.
TITLE PAGE
SCENE TRANSITION
CUSTOM ENTER TRANSITION
CURVE ANIMATION
RIPPLE EFFECT
CONTENTS
INTERACTION
HOME
SPLASH
01.
DESIGN
PROTOTYPING
WEBTOON FRAME
VERTICAL
CONTENTS
CONTAINER
DESIGN
CONCEPT
사각형의 움직임은 3가지
가속도는 2가지
ISSUE
CONSULTATION
합져지고 줄어들고 늘어난다
CONSULTATION
CONSULTATION
CONSULTATION
protected void onDraw(Canvas canvas) {
...
if (offset < 0.5f) {
// 빨간 사각형
canvas.drawRect(left, top, right, bottom, mMainPaint);
// 하얀 사각형
if (animateLength <= mGapHeight) {
bottom = centerY - mContentHeight / 2;
top = bottom - mGapHeight + animateLength;
canvas.drawRect(left, top, right, bottom, mSubPaint);
top = centerY + mContentHeight / 2;
bottom = top + mGapHeight - animateLength;
canvas.drawRect(left, top, right, bottom, mSubPaint);
}
} else if (offset >= 0.5f) {
float offset = (this.offset - 0.5f) * 2f;
top = centerY - mEndHeight / 2;
bottom = centerY + mEndHeight / 2;
left = mPadding + (left - mPadding) * (1.f - offset);
right = right + (width - mPadding - right) * offset;
canvas.drawRect(left, top, right, bottom, mMainPaint);
}
...
}
DEVELOPMENT
PROTOTYPING
DEVELOPMENT
PROTOTYPING
INTERACTION
HOME
SYMBOLIC ICON
01.
REQUEST
동영상 또는 GIF 가 탭마다 플레이
ISSUE
빠르게 Tab 이동시 생기는 문제들
프레임 드랍, 메모리 이슈 등
SOLUTION
아이콘을 Path 로 구현
+ Tab 이동시 Path Morphing
DESIGN
PROTOTYPING
C A S H N O W T I M E P E R I O D C H O I C E
DESIGN
CONCEPT
<string name="shape_path_hour_glass">
M 57.6,10.5 L 16,10.5 C 16,10.5 78.6,99.5 78.6,99.5 L 120.3,99.5 C 120.3,99.5 57.6,10.5 57.6,10.5 z
M 120.3,99.5 L 78.6,99.5 C 78.6,99.5 16,188.4 16,188.4 L 57.6,188.4 C 57.6,188.4 120.3,99.5 120.3,99.5 z
M 78.6,99.5 L 120.3,99.5 C 120.3,99.5 183,10.5 183,10.5 L 141.3,10.5 C 141.3,10.5 78.6,99.5 78.6,99.5 z
M 141.3,188.4 L 183,188.4 C 183,188.4 120.3,99.5 120.3,99.5 L 78.6,99.5 C 78.6,99.5 141.3,188.4 141.3,188.4 z
M 40.2,154.5 L 16,188.4 C 16,188.4 183,188.4 183,188.4 L 158.7,154.5 C 158.7,154.5 40.2,154.5 40.2,154.5 z
</string>
<string name="shape_path_hour_glass_end">
M 158.7,44 L 183,10.5 C 183,10.5 16,10.5 16,10.5 L 40.2,44 C 40.2,44 158.7,44 158.7,44 z
</string>
<string name="shape_path_circle">
M 70.2,48.8 L 52.2,17.7 C 24.0,34.0 5.0,64.4 4.9,99.5 L 41.0,99.6 C 40.9,77.9 52.8,59.0 70.2,48.8 z
M 41.1,99.5 L 4.9,99.5 C 6.1,131.5 22.0,163.8 52.2,181.4 L 70.2,150.1 C 51.5,139.3 41.1,119.7 41.1,99.5 z
M 158.1,99.5 L 194.1,99.5 C 194.0,66.9 177.0,35.2 146.7,17.7 L 128.7,48.9 C 147.5,59.7 157.9,79.3 157.9,99.5 z
M 128.8,150.2 L 146.8,181.3 C 175.0,165.0 194.0,134.6 194.1,99.5 L 158.1,99.5 C 158.1,121.1 146.2,140.0 128.8,150.2 z
M 70.3,150.1 L 52.2,181.4 C 80.5,197.6 116.4,198.8 146.8,181.3 L 128.8,150.2 C 110.0,161.0 87.8,160.2 70.3,150.1 z
</string>
<string name="shape_path_circle_end">
M 128.7,48.9 L 146.7,17.7 C 118.5,1.4 82.6,0.2 52.2,17.7 L 70.2,48.8 C 89.0,38.0 111.2,38.8 128.7,48.9 z
</string>
L 52.2,17.7 C 24.0,34.0 5.0,64.4 4.9,99.5
L 16,10.5 C 16,10.5 78.6,99.5 78.6,99.5
DEVELOPMENT
PROTOTYPING
switch (mPathIndex) {
case 0: // C
canvas.rotate(90.f * animateOffset + 90.f, centerX, centerY);
break;
case 2: // N
canvas.rotate(90.f * animateOffset + 180.f, centerX, centerY);
break;
case 4: // hourglass
canvas.rotate(90.f * animateOffset + 0.f, centerX, centerY);
break;
case 8: // ice
canvas.rotate(90.f * animateOffset + 90.f, centerX, centerY);
break;
case 6: // circle
default:
canvas.rotate(90.f * animateOffset, centerX, centerY);
break;
}
DEVELOPMENT
PROTOTYPING
DEVELOPMENT
PROTOTYPING
CONSULTATION
CONSULTATION
DEVELOPMENT
PROTOTYPING
OUTPUT
INTERACTION
HOME
LIST ANIMATION
01.
DESIGN
PROTOTYPING
DEFAULT
LIST
ANIMATION
DEVELOPMENT
PROTOTYPING
android.support.v7.widget.DefaultItemAnimator
코드를 복사해서 callback 추가
DEVELOPMENT
PROTOTYPING
CUSTOM
ANIMATION
CustomItemAnimator animator = new CustomItemAnimator();
animator.setItemAnimatorListener(new CustomItemAnimator.ItemAnimatorListener() {
@Override
public void onAddPreStart(RecyclerView.ViewHolder viewHolder) {
View view = viewHolder.itemView;
ViewCompat.setAlpha(view, 0f);
ViewCompat.setTranslationY(view, view.getHeight() / 4);
}
@Override
public void onAddAnimatorPrepare(RecyclerView.ViewHolder viewHolder
, ViewPropertyAnimatorCompat animator) {
animator.alpha(1.f)
.translationY(0f)
.setInterpolator(DECELERATE_INTERPOLATOR);
int position = viewHolder.getAdapterPosition();
if (position >= 0 && position < 10) {
animator.setStartDelay(50 * position);
}
}
@Override
public void onAddFinished(RecyclerView.ViewHolder viewHolder) {
View view = viewHolder.itemView;
ViewCompat.setAlpha(view, 1f);
ViewCompat.setTranslationY(view, 0f);
}
});
DEVELOPMENT
PROTOTYPING
STEP 1
Data 교체
STEP 2
Add Animation start
STEP 3
Scroll Up
STEP 4
새로운 row 추가 (Add Animation 없음)
ISSUE
DEVELOPMENT
PROTOTYPING
public class CustomItemAnimator extends SimpleItemAnimator {
...
@Override
public void runPendingAnimations() {
...
ArrayList<RecyclerView.ViewHolder> pendingList
= adapter.getPendingViewHolder();
for (int i = additions.size(); i < pendingList.size(); i++) {
RecyclerView.ViewHolder holder = pendingList.get(i);
itemAnimatorListener.onAddPreStart(holder);
additions.add(holder);
}
adapter.clearPendingViewHolder();
...
}
...
}
additions.add(holder);
OUTPUT
SCENE TRANSITION
TITLE PAGE
CUSTOM
02.
DESIGN
PROTOTYPING
ActivityTransition
문제점
SharedElement
CONSULTATION
SharedElement 로 사용되는
이미지 로드가 느림
ISSUE 1
CONSULTATION
getLocationInWindow() 값이
StatusBar Height 만큼 어긋남
ISSUE 2
CONSULTATION
ChangeBounds 가 오동작하여
이미지 Scale 이 어긋남
ISSUE 3
CONSULTATION
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
STEP 1
TitlePage Activity Start
STEP 2
HOME Activity, TitlePage Activity Cross Fade
Custom
EnterTransition
DEVELOPMENT
PROTOTYPING
STEP 3
이미지 Show(onPreDraw)
DEVELOPMENT
PROTOTYPING
Custom
EnterTransition
STEP 4
Animation Start
DEVELOPMENT
PROTOTYPING
Custom
EnterTransition
private void startEnterAnimation() {
Rect previewRect = mPreViewRect;
float scaleX = (float) previewRect.width() / mImagePreview.getWidth();
float scaleY = (float) previewRect.height() / mImagePreview.getHeight();
int transX = previewRect.left - mImagePreview.getLeft() -
(mImagePreview.getWidth() - previewRect.width()) / 2;
int transY = previewRect.top - mImagePreview.getTop();
ValueAnimator animator = ValueAnimator.ofFloat(0.f, 1.f);
animator.addUpdateListener(animation -> {
Float offset = (Float) animation.getAnimatedValue();
float reverseOffset = 1.f - offset;
ViewCompat.setTranslationX(mImagePreview, transX * reverseOffset);
ViewCompat.setTranslationY(mImagePreview, transY * reverseOffset);
ViewCompat.setScaleX(mImagePreview, (1.f - scaleX) * offset + scaleX);
ViewCompat.setScaleY(mImagePreview, (1.f - scaleY) * offset + scaleY);
});
animator.setInterpolator(DECELERATE_INTERPOLATOR);
animator.start();
}
DEVELOPMENT
PROTOTYPING
Custom
EnterTransition
DEVELOPMENT
PROTOTYPING
SCENE TRANSITION
TITLE PAGE
CURVE ANIMATION
02.
private void startEnterAnimation() {
Rect previewRect = mPreViewRect;
float scaleX = (float) previewRect.width() / mImagePreview.getWidth();
float scaleY = (float) previewRect.height() / mImagePreview.getHeight();
int transX = previewRect.left - mImagePreview.getLeft() -
(mImagePreview.getWidth() - previewRect.width()) / 2;
int transY = previewRect.top - mImagePreview.getTop();
ValueAnimator animator = ValueAnimator.ofFloat(0.f, 1.f);
animator.addUpdateListener(animation -> {
Float offset = (Float) animation.getAnimatedValue();
float reverseOffset = 1.f - offset;
ViewCompat.setTranslationX(mImagePreview, transX
* (1.f - DECELERATE_INTERPOLATOR.getInterpolation(offset)));
ViewCompat.setTranslationY(mImagePreview, transY * reverseOffset);
ViewCompat.setScaleX(mImagePreview, (1.f - scaleX) * offset + scaleX);
ViewCompat.setScaleY(mImagePreview, (1.f - scaleY) * offset + scaleY);
});
animator.setInterpolator(DECELERATE_INTERPOLATOR);
animator.start();
}
ViewCompat.setTranslationX(mImagePreview, transX
* (1.f - DECELERATE_INTERPOLATOR.getInterpolation(offset)));
Curve Animation
DEVELOPMENT
PROTOTYPING
SCENE TRANSITION
TITLE PAGE
RIPPLE EFFECT
02.
Ripple Effect
DEVELOPMENT
PROTOTYPING
@Override
protected void onDraw(Canvas canvas) {
int centerX = getMeasuredWidth() / 2;
int centerY = getMeasuredHeight() / 2;
float radius = (float) (Math.sqrt(centerX * centerX + centerY * centerY)
* animateOffset);
path.reset();
path.addCircle(centerX, centerY, radius, Path.Direction.CW);
path.close();
canvas.save();
canvas.clipPath(path);
mDrawable = getDrawable();
if (mDrawable == null) {
mBackground.draw(canvas);
} else {
mDrawable.draw(canvas);
}
canvas.restore();
}
canvas.clipPath(path);
Ripple Effect
DEVELOPMENT
PROTOTYPING
OUTPUT
ISSUE 1
TitlePage Activity Start
+ Image onPreDraw 시간만큼 딜레이 존재
DEVELOPMENT
PROTOTYPING
EnterTransition 을 Main 에서 처리
(lifecycle 활용)
SOLUTION 1
DEVELOPMENT
PROTOTYPING
SOLUTION 1
WebtoonHomeTransitionManager.instance.enterTrasition(lifecycle,
object : EnterTransitionListener {
override fun onActivityTransitionEnd() {
WebtoonHomeActivity.startActivity(activity, targetView)
}
override fun setContentAlpha(alpha: Float) {
id_home_drawer_container?.alpha = alpha
}
})
DEVELOPMENT
PROTOTYPING
VER. 2.1VER. 2.0
OUTPUT
Main Activity 로 돌아갈 때
Cross Fade 느낌이 없음
ISSUE 2
DEVELOPMENT
PROTOTYPING
ActivityTransition
Fade 사용
SOLUTION 2
DEVELOPMENT
PROTOTYPING
VER. 2.1VER. 2.0
OUTPUT
OUTPUT
Splash
Natural
Focusing
Meaningful
INTERACTION
KEYWORD
Creative
Symbolic Icon
All
Splash
Ripple, List
NEXT
DESIGN
PROTOTYPING
THANK YOU

More Related Content

PDF
KeycloakのCNCF incubating project入りまでのアップストリーム活動の歩み
PDF
클라우드로 데이터 센터 확장하기 : 하이브리드 환경을 위한 연결 옵션 및 고려사항::강동환::AWS Summit Seoul 2018
DOCX
Relation publiques (Jarosinsky) : synthèse
PPTX
WebRTCとSFU
PDF
WebRTCの技術解説 公開版
PDF
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
PPTX
Skittles
PDF
Omni-channel, cross-channel customer experience
KeycloakのCNCF incubating project入りまでのアップストリーム活動の歩み
클라우드로 데이터 센터 확장하기 : 하이브리드 환경을 위한 연결 옵션 및 고려사항::강동환::AWS Summit Seoul 2018
Relation publiques (Jarosinsky) : synthèse
WebRTCとSFU
WebRTCの技術解説 公開版
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Skittles
Omni-channel, cross-channel customer experience

What's hot (20)

PDF
[JAWS-UG Tokyo 32] AWS Client VPNの特徴
PDF
Formation vsat
PDF
Mémoire : Relation Marque Consommateur et Web 2.0 : La révolution induite par...
PDF
Try new transport protocol SRT (ver. 2)
PDF
Présentation circuits courts et la valorisation touristiques des produits du ...
PDF
E-reputation le nouvel enjeu des entreprises par Sarah Launay
PDF
WebSocketでカメラの映像を共有してみた
PPT
Communication Digitale
PDF
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
ODP
Introduction au Cloud computing
PPTX
MediaRecorder と WebM で、オレオレ Live Streaming
PDF
Amazon VPC VPN接続設定 参考資料
PDF
運用に自動化を求めるのは間違っているだろうか
PPTX
2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안
PDF
AWS Black Belt Online Seminar AWS Key Management Service (KMS)
PPTX
La technique de transmission OFDM
PDF
AbemaTV が対峙する技術的課題と開発の現場
PDF
Linux KVMではじめるカンタン仮想化入門
PDF
CV Maeva FAU 2018
PDF
大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク
[JAWS-UG Tokyo 32] AWS Client VPNの特徴
Formation vsat
Mémoire : Relation Marque Consommateur et Web 2.0 : La révolution induite par...
Try new transport protocol SRT (ver. 2)
Présentation circuits courts et la valorisation touristiques des produits du ...
E-reputation le nouvel enjeu des entreprises par Sarah Launay
WebSocketでカメラの映像を共有してみた
Communication Digitale
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
Introduction au Cloud computing
MediaRecorder と WebM で、オレオレ Live Streaming
Amazon VPC VPN接続設定 参考資料
運用に自動化を求めるのは間違っているだろうか
2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안
AWS Black Belt Online Seminar AWS Key Management Service (KMS)
La technique de transmission OFDM
AbemaTV が対峙する技術的課題と開発の現場
Linux KVMではじめるカンタン仮想化入門
CV Maeva FAU 2018
大義のために:趣味と実益のためのVMware RPCインターフェースの活用 by アブドゥル・アジズ・ハリリ, ジャシエル・スペルマン, ブライアン・ゴーレンク
Ad

More from if kakao (20)

PDF
바닥부터 시작하는 Vue 테스트와 리팩토링
PDF
카카오커머스를 지탱하는 Angular
PDF
프렌즈타임 웹앱 삽질기
PDF
카프카 기반의 대규모 모니터링 플랫폼 개발이야기
PDF
TOROS N2 - lightweight approximate Nearest Neighbor library
PDF
딥러닝을 이용한 얼굴 인식
PDF
딥러닝을 활용한 뉴스 메타 태깅
PDF
눈으로 듣는 음악 추천 시스템
PDF
Keynote / 2018
PDF
카카오 봇 플랫폼 소개
PDF
모바일 게임플랫폼과 인프라 구축 경험기
PDF
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
PDF
카카오뱅크 모바일앱 개발 이야기
PDF
다음 모바일 첫 화면 개선기
PDF
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
PDF
액티브X 없는 블록체인 기반 PKI 시스템
PDF
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
PDF
Kakao Cloud Native Platform, 9rum
PDF
카프카, 산전수전 노하우
PDF
스프링5 웹플럭스와 테스트 전략
바닥부터 시작하는 Vue 테스트와 리팩토링
카카오커머스를 지탱하는 Angular
프렌즈타임 웹앱 삽질기
카프카 기반의 대규모 모니터링 플랫폼 개발이야기
TOROS N2 - lightweight approximate Nearest Neighbor library
딥러닝을 이용한 얼굴 인식
딥러닝을 활용한 뉴스 메타 태깅
눈으로 듣는 음악 추천 시스템
Keynote / 2018
카카오 봇 플랫폼 소개
모바일 게임플랫폼과 인프라 구축 경험기
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오뱅크 모바일앱 개발 이야기
다음 모바일 첫 화면 개선기
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
액티브X 없는 블록체인 기반 PKI 시스템
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
Kakao Cloud Native Platform, 9rum
카프카, 산전수전 노하우
스프링5 웹플럭스와 테스트 전략
Ad

Recently uploaded (20)

PPTX
Transform Your Business with a Software ERP System
PDF
top salesforce developer skills in 2025.pdf
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
Digital Systems & Binary Numbers (comprehensive )
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Digital Strategies for Manufacturing Companies
PDF
Understanding Forklifts - TECH EHS Solution
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
medical staffing services at VALiNTRY
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
Nekopoi APK 2025 free lastest update
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
Transform Your Business with a Software ERP System
top salesforce developer skills in 2025.pdf
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Digital Systems & Binary Numbers (comprehensive )
How to Migrate SBCGlobal Email to Yahoo Easily
How to Choose the Right IT Partner for Your Business in Malaysia
Digital Strategies for Manufacturing Companies
Understanding Forklifts - TECH EHS Solution
Odoo Companies in India – Driving Business Transformation.pdf
medical staffing services at VALiNTRY
Softaken Excel to vCard Converter Software.pdf
PTS Company Brochure 2025 (1).pdf.......
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Nekopoi APK 2025 free lastest update
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
CHAPTER 2 - PM Management and IT Context
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
VVF-Customer-Presentation2025-Ver1.9.pptx

다음웹툰의 UX(Animation, Transition, Custom View)