91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何自定義View實現抖音飄動紅心效果

發布時間:2020-07-21 17:19:13 來源:億速云 閱讀:260 作者:小豬 欄目:移動開發

小編這次要給大家分享的是Android如何自定義View實現抖音飄動紅心效果,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

自定義View——抖音飄動紅心

效果展示

動畫效果

使用自定義view完成紅心飄動效果

Android如何自定義View實現抖音飄動紅心效果

View實現

動畫:屬性動畫(位移+縮放+透明度+旋轉)
+
隨機數:(屬性動畫參數+顏色選取)

View

/**
 * 飄心效果
 * 1.創建ImageView
 * 2.ImageView執行組合動畫
 * 3.動畫執行完成后銷毀View
 */
public class FlyHeartView extends RelativeLayout {

  private int defoutWidth = 200;//默認控件寬度
  private long mDuration = 3000;//默認動畫時間
  //顏色集合 從中獲取顏色
  private int[] color = {
      0xFFFF34B3, 0xFF9ACD32, 0xFF9400D3, 0xFFEE9A00,
      0xFFFFB6C1, 0xFFDA70D6, 0xFF8B008B, 0xFF4B0082,
      0xFF483D8B, 0xFF1E90FF, 0xFF00BFFF, 0xFF00FF7F
  };

  public FlyHeartView(Context context) {
    super(context);
    initFrameLayout();
  }

  public FlyHeartView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initFrameLayout();
  }

  private void initFrameLayout() {
    ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(defoutWidth, ViewGroup.LayoutParams.WRAP_CONTENT);
    setLayoutParams(params);
  }

  /**
   * 創建一個心形的view視圖
   */
  private ImageView createHeartView() {
    ImageView heartIv = new ImageView(getContext());
    LayoutParams params = new LayoutParams(defoutWidth / 2, defoutWidth / 2);

    //控件位置
    params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    params.addRule(RelativeLayout.CENTER_HORIZONTAL);

    heartIv.setLayoutParams(params);
    heartIv.setImageResource(R.mipmap.ic_heart);
    //改變顏色
    heartIv.setImageTintList(ColorStateList.valueOf(color[(int) (color.length * Math.random())]));
    return heartIv;
  }

  /**
   * 執行動畫
   * 在展示調用該方法
   */
  public void startFly() {
    final ImageView heartIv = createHeartView();
    addView(heartIv);
    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.play(createTranslationX(heartIv))
        .with(createTranslationY(heartIv))
        .with(createScale(heartIv))
        .with(createRotation(heartIv))
        .with(createAlpha(heartIv));
    //執行動畫
    animatorSet.start();
    //銷毀view
    animatorSet.addListener(new AnimatorListenerAdapter() {
      @Override
      public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        removeView(heartIv);
      }
    });
  }

  /**
   * 橫向正弦位移動畫
   *
   * @return
   */
  private Animator createTranslationX(View view) {
    ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationX", 0, (float) (defoutWidth * Math.random() / 4));
    animator.setDuration(mDuration);
    //CycleInterpolator cycles 正弦曲線數
    animator.setInterpolator(new CycleInterpolator((float) (3 * Math.random())));
    return animator;
  }


  /**
   * 縱向加速位移動畫
   *
   * @return
   */
  private Animator createTranslationY(View view) {
    ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationY", 0, -1000);
    animator.setDuration(mDuration);
    animator.setInterpolator(new AccelerateInterpolator());
    return animator;
  }


  /**
   * 加速放大動畫
   *
   * @return
   */
  private Animator createScale(View view) {
    ObjectAnimator animatorX = ObjectAnimator.ofFloat(view, "scaleX", 1, 1.5f);
    ObjectAnimator animatorY = ObjectAnimator.ofFloat(view, "scaleY", 1, 1.5f);
    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.setDuration(mDuration);
    animatorSet.setInterpolator(new AccelerateInterpolator());
    animatorSet.play(animatorX).with(animatorY);
    return animatorSet;
  }

  /**
   * 透明度動畫
   *
   * @return
   */
  private Animator createAlpha(View view) {
    ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 1, 0.1f);
    animator.setDuration(mDuration);
    animator.setInterpolator(new AccelerateInterpolator());
    return animator;
  }

  /**
   * 旋轉動畫
   *
   * @return
   */
  private Animator createRotation(View view) {
    ObjectAnimator animator = ObjectAnimator.ofFloat(view, "rotation", 0, (float) (25f * Math.random()));
    animator.setDuration(mDuration);
    animator.setInterpolator(new CycleInterpolator((float) (6 * Math.random())));
    return animator;
  }


}

最后在MainActivity中調用FlyHeartView 的startFly()方法就能實現點擊飄心效果。

看完這篇關于Android如何自定義View實現抖音飄動紅心效果的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东丰县| 巴里| 古交市| 登封市| 南阳市| 大名县| 谷城县| 沧州市| 许昌市| 诏安县| 巫溪县| 沽源县| 富裕县| 湘阴县| 简阳市| 思茅市| 克拉玛依市| 伽师县| 花莲县| 紫云| 玛纳斯县| 交城县| 鄂伦春自治旗| 阳江市| 格尔木市| 丘北县| 潼关县| 简阳市| 泰兴市| 合肥市| 洞口县| 阿鲁科尔沁旗| 峨眉山市| 勃利县| 景东| 望江县| 莎车县| 武威市| 巴南区| 左贡县| 武宁县|