十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
本文給大家分享高級(jí)UI特效仿直播點(diǎn)贊效果—一個(gè)優(yōu)美炫酷的點(diǎn)贊動(dòng)畫,具體實(shí)現(xiàn)代碼大家參考本文。
目前成都創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、碧江網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
效果圖如下:
攻克難點(diǎn):
心形圖片的路徑等走向 心形圖片的控制范圍
部分代碼如下:
通過(guò)AbstractPathAnimator定義飄心動(dòng)畫控制器
@Override public void start(final View child, final ViewGroup parent) { parent.addView(child, new ViewGroup.LayoutParams(mConfig.heartWidth, mConfig.heartHeight)); FloatAnimation anim = new FloatAnimation(createPath(mCounter, parent, 2), randomRotation(), parent, child); anim.setDuration(mConfig.animDuration); anim.setInterpolator(new LinearInterpolator());//啟動(dòng)動(dòng)畫 anim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationEnd(Animation animation) { mHandler.post(new Runnable() { @Override public void run() { parent.removeView(child); } }); mCounter.decrementAndGet(); } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationStart(Animation animation) { mCounter.incrementAndGet(); } }); anim.setInterpolator(new LinearInterpolator()); child.startAnimation(anim); } /** * 根據(jù)圖片設(shè)置bitmap * @param color * @return */ public Bitmap createHeart(int color) { if (sHeart == null) { sHeart = BitmapFactory.decodeResource(getResources(), mHeartResId); } if (sHeartBorder == null) { sHeartBorder = BitmapFactory.decodeResource(getResources(), mHeartBorderResId); } Bitmap heart = sHeart; Bitmap heartBorder = sHeartBorder; Bitmap bm = createBitmapSafely(heartBorder.getWidth(), heartBorder.getHeight()); if (bm == null) { return null; } Canvas canvas = sCanvas; canvas.setBitmap(bm); Paint p = sPaint; canvas.drawBitmap(heartBorder, 0, 0, p); p.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP)); float dx = (heartBorder.getWidth() - heart.getWidth()) / 2f; float dy = (heartBorder.getHeight() - heart.getHeight()) / 2f; canvas.drawBitmap(heart, dx, dy, p); p.setColorFilter(null); canvas.setBitmap(null); return bm; }
如何創(chuàng)建一個(gè)path
public Path createPath(AtomicInteger counter, View view, int factor) { Random r = mRandom; int x = r.nextInt(mConfig.xRand); int x2 = r.nextInt(mConfig.xRand); int y = view.getHeight() - mConfig.initY; int y2 = counter.intValue() * 15 + mConfig.animLength * factor + r.nextInt(mConfig.animLengthRand); factor = y2 / mConfig.bezierFactor; //隨機(jī)xPoint int xPointFactor = mRandom.nextInt(mConfig.xPointFactor); x = xPointFactor + x; x2 = xPointFactor + x2; int y3 = y - y2; y2 = y - y2 / 2; Path p = new Path(); p.moveTo(mConfig.initX, y); p.cubicTo(mConfig.initX, y - factor, x, y2 + factor, x, y2); p.moveTo(x, y2); p.cubicTo(x, y2 - factor, x2, y3 + factor, x2, y3); return p; }
Activity中代碼:
下面給大家分享一個(gè)源碼:html5+canvas仿抖音直播愛心飄動(dòng)點(diǎn)贊動(dòng)畫特效源碼
總結(jié)
以上所述是小編給大家介紹的Android高級(jí)UI特效仿直播點(diǎn)贊動(dòng)畫效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!