iOS와 Android에서 이미지를 빛내는 연출 구현 비교
iOS 버전의 완제품
※gif라면 애니메이션 완료의 대기도 하고 있습니다만, 이 기사에서는 빛난 화상의 생성과 단체의 애니메이션의 실장 방법만 씁니다.
※Android판은 gif를 준비하고 있지 않습니다만, 거의 같습니다. 차이에 대해서는 마지막으로.
애니메이션 실행의 흐름
완성품의 gif에서는 이하의 처리를 실시하고 있습니다.
완성품의 gif에서는 이하의 처리를 실시하고 있습니다.
이하, 요소요소의 iOS와 안드로이드의 코드입니다. 쓸 때까지 없는 곳은 생략하고 있습니다.
※Android판은 ViewAnimator를 사용하고 있습니다.
htps : // 기주 b. 코 m / f 렌 t37 / ぃ 에와 마토 r
빛나는 이미지 생성
iOS(Swift)
// 元の画像に白色をhardLightモードでブレンド
let image = UIImage.imageFromAsset(name: "stamp_complete")?
.colorizeImage(color: UIColor.white, blendMode: CGBlendMode.hardLight)
// ブレンドするメソッド
public func colorizeImage(color: UIColor, blendMode: CGBlendMode = CGBlendMode.plusLighter) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.size, false, 0)
let context = UIGraphicsGetCurrentContext()
let rect = CGRect(origin: CGPoint.zero, size: self.size)
context?.scaleBy(x: 1, y: -1)
context?.translateBy(x: 0, y: -rect.size.height)
context?.saveGState()
context?.clip(to: rect, mask: self.cgImage!)
color.set()
context?.fill(rect)
context?.restoreGState()
context?.setBlendMode(blendMode)
context?.draw(self.cgImage!, in: rect)
let colorizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return colorizedImage
}
Android(Java)
ImageView glowView = new ImageView(getContext());
glowView.setLayoutParams(new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
));
// 元の画像をセット
glowView.setImageResource(R.drawable.stamp_star);
glowView.setAdjustViewBounds(true);
// 画像を明るくするフィルタ
ColorFilter filter = new LightingColorFilter(Color.rgb(255, 255, 255), Color.rgb(100, 100, 100));
glowView.setColorFilter(filter);
iOS에서는 UIImage 자체를 가공하고 있지만 Android에서는 ImageView의 필터 메서드를 사용하고 있습니다.
일반 이미지를 페이드 인 + 스케일 아웃으로 표시
iOS(Swift)
// 登場アニメーション(スケールアウト)
// あらかじめ縮めておく
stampView.transform = CGAffineTransform(scaleX: 0.01, y: 0.01)
UIView.animate(withDuration: 0.3,
delay: delay,
usingSpringWithDamping: 0.5,
initialSpringVelocity: 1.0,
options: [.beginFromCurrentState],
animations: {
// もとの大きさに戻す
stampView.transform = CGAffineTransform.identity
},
completion: { (finished) in
})
// 登場アニメーション(フェードイン)
let alphaAnim = CABasicAnimation(keyPath: "opacity")
alphaAnim.duration = 0.15
alphaAnim.toValue = 1.0
alphaAnim.fillMode = kCAFillModeForwards
alphaAnim.isRemovedOnCompletion = false
CATransaction.begin()
CATransaction.setCompletionBlock {
}
stampView.layer.add(alphaAnim, forKey: "stamp")
CATransaction.commit()
Android(Java)
// 登場アニメーション(スケールアウト+フェードイン)
ViewAnimator.animate(view)
.fadeIn()
.duration(150)
.andAnimate(view)
.scale(0, 1)
.duration(200)
.interpolator(new BounceInterpolator())
.onStop(() -> {
})
.start();
여유는 각각의 방법이므로, 완전하게 갖추어져 있지 않습니다.
Android 버전은 ViewAnimator라는 멋진 라이브러리 덕분에 깨끗이 쓸 수 있습니다.
빛나는 이미지를 페이드 인으로 표시
iOS(Swift)
UIView.animate(withDuration: 0.15, delay: delay, options: [.beginFromCurrentState, .curveLinear], animations: {
imageView.alpha = 1
}, completion: { (finished) in
UIView.animate(withDuration: 0.3, delay: delay, options: [.beginFromCurrentState, .curveEaseOut], animations: {
imageView.transform = CGAffineTransform(scaleX: 1.8, y: 1.8)
imageView.alpha = 0
}, completion: { (finished) in
})
})
Android(Java)
ViewAnimator.animate(view)
.onStart(() -> {
view.setVisibility(VISIBLE);
})
.fadeIn()
.duration(150)
.thenAnimate(view)
.scale(1.0f, 1.8f)
.fadeOut()
.interpolator(new DecelerateInterpolator())
.duration(300)
.onStop(() -> {
})
.start();
iOS 버전과 Android 버전의 차이점
여유
별이 표시될 때의 확대 애니메이션의 여유는 각각의 방법을 사용하고 있기 때문에 다릅니다. 세세하게 조정하면 갖추어질 수 있다고 생각합니다.
(Android에서는 BounceInterporator, iOS에서는 animateWithSpringDumping을 이용.)
가공 후 별 이미지
iOS 쪽이 흰색이 강한 기분이 들기 때문에, 이쪽도 세세하게 조정하면 더 가까워진다고 생각합니다.
감상
빛나는 화상을 준비해 주실 수 있으면 가공 불필요합니다만, 동적으로 바꿀 수 있으면 여러가지 시험하고 싶을 때나 미묘하게 조정하고 싶을 때에 편리합니다.
코드를 뽑아 부분적으로 싣고 있기 때문에, 만약 이상한 부분이 있으면 가르쳐 주시면 도움이 됩니다.
Reference
이 문제에 관하여(iOS와 Android에서 이미지를 빛내는 연출 구현 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Tueno@github/items/fe1825da5fe124516615
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// 元の画像に白色をhardLightモードでブレンド
let image = UIImage.imageFromAsset(name: "stamp_complete")?
.colorizeImage(color: UIColor.white, blendMode: CGBlendMode.hardLight)
// ブレンドするメソッド
public func colorizeImage(color: UIColor, blendMode: CGBlendMode = CGBlendMode.plusLighter) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.size, false, 0)
let context = UIGraphicsGetCurrentContext()
let rect = CGRect(origin: CGPoint.zero, size: self.size)
context?.scaleBy(x: 1, y: -1)
context?.translateBy(x: 0, y: -rect.size.height)
context?.saveGState()
context?.clip(to: rect, mask: self.cgImage!)
color.set()
context?.fill(rect)
context?.restoreGState()
context?.setBlendMode(blendMode)
context?.draw(self.cgImage!, in: rect)
let colorizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return colorizedImage
}
ImageView glowView = new ImageView(getContext());
glowView.setLayoutParams(new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
));
// 元の画像をセット
glowView.setImageResource(R.drawable.stamp_star);
glowView.setAdjustViewBounds(true);
// 画像を明るくするフィルタ
ColorFilter filter = new LightingColorFilter(Color.rgb(255, 255, 255), Color.rgb(100, 100, 100));
glowView.setColorFilter(filter);
iOS(Swift)
// 登場アニメーション(スケールアウト)
// あらかじめ縮めておく
stampView.transform = CGAffineTransform(scaleX: 0.01, y: 0.01)
UIView.animate(withDuration: 0.3,
delay: delay,
usingSpringWithDamping: 0.5,
initialSpringVelocity: 1.0,
options: [.beginFromCurrentState],
animations: {
// もとの大きさに戻す
stampView.transform = CGAffineTransform.identity
},
completion: { (finished) in
})
// 登場アニメーション(フェードイン)
let alphaAnim = CABasicAnimation(keyPath: "opacity")
alphaAnim.duration = 0.15
alphaAnim.toValue = 1.0
alphaAnim.fillMode = kCAFillModeForwards
alphaAnim.isRemovedOnCompletion = false
CATransaction.begin()
CATransaction.setCompletionBlock {
}
stampView.layer.add(alphaAnim, forKey: "stamp")
CATransaction.commit()
Android(Java)
// 登場アニメーション(スケールアウト+フェードイン)
ViewAnimator.animate(view)
.fadeIn()
.duration(150)
.andAnimate(view)
.scale(0, 1)
.duration(200)
.interpolator(new BounceInterpolator())
.onStop(() -> {
})
.start();
여유는 각각의 방법이므로, 완전하게 갖추어져 있지 않습니다.
Android 버전은 ViewAnimator라는 멋진 라이브러리 덕분에 깨끗이 쓸 수 있습니다.
빛나는 이미지를 페이드 인으로 표시
iOS(Swift)
UIView.animate(withDuration: 0.15, delay: delay, options: [.beginFromCurrentState, .curveLinear], animations: {
imageView.alpha = 1
}, completion: { (finished) in
UIView.animate(withDuration: 0.3, delay: delay, options: [.beginFromCurrentState, .curveEaseOut], animations: {
imageView.transform = CGAffineTransform(scaleX: 1.8, y: 1.8)
imageView.alpha = 0
}, completion: { (finished) in
})
})
Android(Java)
ViewAnimator.animate(view)
.onStart(() -> {
view.setVisibility(VISIBLE);
})
.fadeIn()
.duration(150)
.thenAnimate(view)
.scale(1.0f, 1.8f)
.fadeOut()
.interpolator(new DecelerateInterpolator())
.duration(300)
.onStop(() -> {
})
.start();
iOS 버전과 Android 버전의 차이점
여유
별이 표시될 때의 확대 애니메이션의 여유는 각각의 방법을 사용하고 있기 때문에 다릅니다. 세세하게 조정하면 갖추어질 수 있다고 생각합니다.
(Android에서는 BounceInterporator, iOS에서는 animateWithSpringDumping을 이용.)
가공 후 별 이미지
iOS 쪽이 흰색이 강한 기분이 들기 때문에, 이쪽도 세세하게 조정하면 더 가까워진다고 생각합니다.
감상
빛나는 화상을 준비해 주실 수 있으면 가공 불필요합니다만, 동적으로 바꿀 수 있으면 여러가지 시험하고 싶을 때나 미묘하게 조정하고 싶을 때에 편리합니다.
코드를 뽑아 부분적으로 싣고 있기 때문에, 만약 이상한 부분이 있으면 가르쳐 주시면 도움이 됩니다.
Reference
이 문제에 관하여(iOS와 Android에서 이미지를 빛내는 연출 구현 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Tueno@github/items/fe1825da5fe124516615
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
UIView.animate(withDuration: 0.15, delay: delay, options: [.beginFromCurrentState, .curveLinear], animations: {
imageView.alpha = 1
}, completion: { (finished) in
UIView.animate(withDuration: 0.3, delay: delay, options: [.beginFromCurrentState, .curveEaseOut], animations: {
imageView.transform = CGAffineTransform(scaleX: 1.8, y: 1.8)
imageView.alpha = 0
}, completion: { (finished) in
})
})
ViewAnimator.animate(view)
.onStart(() -> {
view.setVisibility(VISIBLE);
})
.fadeIn()
.duration(150)
.thenAnimate(view)
.scale(1.0f, 1.8f)
.fadeOut()
.interpolator(new DecelerateInterpolator())
.duration(300)
.onStop(() -> {
})
.start();
여유
별이 표시될 때의 확대 애니메이션의 여유는 각각의 방법을 사용하고 있기 때문에 다릅니다. 세세하게 조정하면 갖추어질 수 있다고 생각합니다.
(Android에서는 BounceInterporator, iOS에서는 animateWithSpringDumping을 이용.)
가공 후 별 이미지
iOS 쪽이 흰색이 강한 기분이 들기 때문에, 이쪽도 세세하게 조정하면 더 가까워진다고 생각합니다.
감상
빛나는 화상을 준비해 주실 수 있으면 가공 불필요합니다만, 동적으로 바꿀 수 있으면 여러가지 시험하고 싶을 때나 미묘하게 조정하고 싶을 때에 편리합니다.
코드를 뽑아 부분적으로 싣고 있기 때문에, 만약 이상한 부분이 있으면 가르쳐 주시면 도움이 됩니다.
Reference
이 문제에 관하여(iOS와 Android에서 이미지를 빛내는 연출 구현 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Tueno@github/items/fe1825da5fe124516615
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(iOS와 Android에서 이미지를 빛내는 연출 구현 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Tueno@github/items/fe1825da5fe124516615텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)