Étant donné que la production d'animation réalisée dans la version iOS a été portée sur la version Android, je laisserai cette fois-là un mémorandum.
Le gif fini est traité comme suit.
Vous trouverez ci-dessous les principaux codes iOS et Android. J'omets les parties qui n'ont pas besoin d'être écrites.
iOS(Swift)
//Mélangez le blanc avec l'image originale en mode HardLight
let image = UIImage.imageFromAsset(name: "stamp_complete")?
.colorizeImage(color: UIColor.white, blendMode: CGBlendMode.hardLight)
//Méthode de mélange
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
));
//Définir l'image d'origine
glowView.setImageResource(R.drawable.stamp_star);
glowView.setAdjustViewBounds(true);
//Filtre pour éclaircir l'image
ColorFilter filter = new LightingColorFilter(Color.rgb(255, 255, 255), Color.rgb(100, 100, 100));
glowView.setColorFilter(filter);
Dans iOS, UIImage lui-même est traité, mais dans Android, la méthode de filtrage d'ImageView est utilisée.
iOS(Swift)
//Animation d'apparence(Évoluer)
//Rétrécir à l'avance
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: {
//Revenir à la taille d'origine
stampView.transform = CGAffineTransform.identity
},
completion: { (finished) in
})
//Animation d'apparence(Fondu en entrée)
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)
//Animation d'apparence (mise à l'échelle + fondu d'entrée)
ViewAnimator.animate(view)
.fadeIn()
.duration(150)
.andAnimate(view)
.scale(0, 1)
.duration(200)
.interpolator(new BounceInterpolator())
.onStop(() -> {
})
.start();
L'assouplissement est chaque méthode, donc ce n'est pas complètement complet. La version Android peut être écrite proprement grâce à une jolie bibliothèque appelée 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();
L'accélération de l'animation agrandie lorsque les étoiles sont affichées est différente car chaque méthode est utilisée. Je pense qu'il sera aligné si vous faites des ajustements fins. (Utilisez Bounce Interporator sur Android et animateWithSpringDumping sur iOS.)
Je pense que le blanc est plus fort sur iOS, donc je pense que si vous faites des ajustements fins, il sera plus proche.
Si vous pouvez préparer une image brillante, aucun traitement n'est requis, mais si vous pouvez la modifier dynamiquement, cela est pratique lorsque vous souhaitez essayer diverses choses ou effectuer des ajustements précis. Le code est extrait et partiellement placé, donc s'il y a quelque chose qui ne va pas, merci de me le faire savoir.
Recommended Posts