1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Android怎么實(shí)現(xiàn)紙飛機(jī)

      這篇文章主要介紹了Android怎么實(shí)現(xiàn)紙飛機(jī),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

      創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比贛縣網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式贛縣網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋贛縣地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

      一、首先自定義一個RelativeLayout,主要目的就是制作飛機(jī)的進(jìn)入動畫:

      public class PaperPlaneLayout extends RelativeLayout implements View.OnClickListener{
        private OnClickListener mOnClickListener;
      
        //自定義布局的寬、高
        private int mHeight;
        private int mWidth;
        private LayoutParams lp;
        private Drawable[] drawables;
        private Random random = new Random();
      
        //獲取4架紙飛機(jī)的寬高
        private int dHeight;
        private int dWidth;
      
        private int mX;
        private int mY;
      
        public PaperPlaneLayout(Context context) {
          super(context);
          init();
        }
      
        public PaperPlaneLayout(Context context, 
          AttributeSet attrs) {
          super(context, attrs);
          init();
        }
      
        public PaperPlaneLayout(Context context, 
          AttributeSet attrs, int defStyleAttr) {
          super(context, attrs, defStyleAttr);
          init();
        }
      
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        public PaperPlaneLayout(Context context, 
          AttributeSet attrs,int defStyleAttr, int defStyleRes) {
          super(context, attrs, defStyleAttr, defStyleRes);
          init();
        }
      
        private void init() {
          // 初始化顯示的圖片
          drawables = new Drawable[4];
          Drawable pink = 
            getResources().getDrawable(R.drawable.pl_pink);
          Drawable yellow = 
            getResources().getDrawable(R.drawable.pl_yellow);
          Drawable green = 
            getResources().getDrawable(R.drawable.pl_green);
          Drawable blue = 
            getResources().getDrawable(R.drawable.pl_blue);
      
          drawables[0] = blue;
          drawables[1] = yellow;
          drawables[2] = green;
          drawables[3] = pink;
          // 獲取圖的寬高 用于后面的計算
          // 注意 我這里4張圖片的大小都是一樣的,所以我只取了一個
          dHeight = UIUtility.dipTopx(getContext(), 80);
          dWidth = UIUtility.dipTopx(getContext(), 80);
          lp = new LayoutParams(dWidth, dHeight);
        }
      
        @Override
        protected void onMeasure(int widthMeasureSpec, 
          int heightMeasureSpec) {
          super.onMeasure(widthMeasureSpec, heightMeasureSpec);
          mWidth = getMeasuredWidth();
          mHeight = getMeasuredHeight();
        }
      
        //真正動畫開始的入口,從外部進(jìn)行調(diào)用,x、y分別表示飛機(jī)進(jìn)入之后所
        //停留的位置坐標(biāo)
        public void addHeart(int x, int y, int position) {
          mX = x;
          mY = y;
          ImageView imageView = new ImageView(getContext());
          // 隨機(jī)選一個
          imageView.setImageDrawable(drawables[position]);
          imageView.setLayoutParams(lp);
          addView(imageView);
          //獲取進(jìn)入前后動畫
          Animator set = getAnimator(imageView);
          set.start();
          imageView.setOnClickListener(this);
        }
      
        private Animator getAnimator(View target) {
          AnimatorSet set = getEnterAnimator(target);
          AnimatorSet set2 = getLineAnimation(target);
          AnimatorSet finalSet = new AnimatorSet();
          finalSet.playSequentially(set, set2);
          finalSet.setInterpolator(new LinearInterpolator());
          finalSet.setTarget(target);
          return finalSet;
        }
      
        private AnimatorSet getEnterAnimator(final View target) {
          ObjectAnimator alpha = ObjectAnimator
            .ofFloat(target, View.ALPHA, 0.2f, 1f);
          ObjectAnimator translationX = ObjectAnimator
            .ofFloat(target, View.TRANSLATION_X, 
              -2 * mWidth, -mWidth);
          AnimatorSet enter = new AnimatorSet();
          enter.setDuration(500);
          enter.setInterpolator(new LinearInterpolator());
          enter.playTogether(translationX, alpha);
          enter.setTarget(target);
          return enter;
        }
      
        private AnimatorSet getLineAnimation(final View iconView) {
          ObjectAnimator transX = ObjectAnimator
            .ofFloat(iconView, "translationX", -dWidth, mX);
          ObjectAnimator transY = ObjectAnimator
            .ofFloat(iconView, "translationY", 
              (mHeight - dHeight) / 2, mY);
            transY.
              setInterpolator(PathInterpolatorCompat
              .create(0.7f, 1f));
      
          AnimatorSet flyUpAnim = new AnimatorSet();
          flyUpAnim.setDuration(900);
          flyUpAnim.playTogether(transX, transY);
          flyUpAnim.setTarget(iconView);
          return flyUpAnim;
        }
      
        @Override
        public void onClick(View v) {
          if (mOnClickListener != null) {
            mOnClickListener.onClick((ImageView) v);
          }
        }
      
        //定義ImageView單擊事件
        public interface OnClickListener {
          void onClick(ImageView v);
        }

      二、接下來就是布局文件的搭建了(只選取一部分控件)

      
      
        
        
      
        
        
      

      三、接下來就可以在Activity中使用了:

      public class PlaneActivity extends AppCompatActivity{
        @Bind(R.id.img_white_cloud)
        ImageView mImgWhiteCloud;
        @Bind(R.id.plane_layout)
        PaperPlaneLayout mPlaneLayout;
      
        private Context mContext;
        private ObjectAnimator objCloudAnim;
        private TranslateAnimation planeAnimation;
      
        private float iconX, iconY;
        //設(shè)置飛機(jī)是否已點(diǎn)擊,如果為true,則另一個飛機(jī)不可點(diǎn)擊
        private boolean mIsClick = true;
      
        @Override
        protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_plane_layout);
          ButterKnife.bind(this);
          mContext = getApplicationContext();
          //初始化動畫
          initAnimation();
          initListener();
        }
      
        private void initAnimation() {
          //設(shè)定紙飛機(jī)進(jìn)入的位置
          initPlaneEnterAnimation();
          //飛機(jī)進(jìn)入后做上下浮動
          initPlaneAnimation();
          //云彩循環(huán)從屏幕右側(cè)飄到屏幕左側(cè)
          initCloudAnimation();
        }
      
        //設(shè)定紙飛機(jī)進(jìn)入的位置
        private void initPlaneEnterAnimation() {
          for (int i = 0; i < 4; i++) {
            final int temp = i;
            mPlaneLayout.post(new Runnable() {
              @Override
              public void run() {
                //下面的值根據(jù)用戶自己設(shè)定
                if (temp == 0) {
                  mPlaneLayout.addHeart(
                    100dp, 140dp, 0);
                }
                if (temp == 1) {
                  mPlaneLayout.addHeart(
                    屏寬 - 120dp, 190dp, 1);
                }
                if (temp == 2) {
                  mPlaneLayout.addHeart(
                    30dp, 240dp, 2);
                }
                if (temp == 3) {
                  mPlaneLayout.addHeart(
                    屏寬 - 210, 290, 3);
                }
              }
            });
          }
        }
      
        //飛機(jī)進(jìn)入后做上下浮動
        private void initPlaneAnimation() {
          planeAnimation = new TranslateAnimation(0, 0, -10, 10);
          planeAnimation.setDuration(1000);
          planeAnimation.setRepeatCount(Animation.INFINITE);
          planeAnimation.setRepeatMode(Animation.REVERSE);
          mPlaneLayout.setAnimation(planeAnimation);
          planeAnimation.start();
        }
      
        //云彩循環(huán)從屏幕右側(cè)飄到屏幕左側(cè)
        private void initCloudAnimation() {
          if (objCloudAnim == null) {
            objCloudAnim = ObjectAnimator
              .ofFloat(mImgWhiteCloud, "translationX", 
                屏寬 - 50, -屏寬);
            // 設(shè)置持續(xù)時間
            objCloudAnim.setDuration(5000);
            // 設(shè)置循環(huán)播放
            objCloudAnim.setRepeatCount(
              ObjectAnimator.INFINITE);
          }
          objCloudAnim.start();
        }
        private void initListener() {
          mPlaneLayout.setOnClickListener(new 
            PaperPlaneLayout.OnClickListener() {
            @Override
            public void onClick(ImageView v) {
              if (mIsClick) {
                mIsClick = false;
                iconX = v.getX();
                iconY = v.getY();
                //當(dāng)點(diǎn)擊某一個紙飛機(jī)時,飛機(jī)會有一個飛出動畫
                planeOutAnimation(v);
              }
            }
          });
        }
      
        /**
         * 飛機(jī)飛出動畫
         */
        private void planeOutAnimation(final View iconView) {
          AnimatorSet flyUpAnim = new AnimatorSet();
          flyUpAnim.setDuration(600);
      
          ObjectAnimator transX = ObjectAnimator
            .ofFloat(iconView, "translationX", 
              iconView.getX(), 
              UIUtility.getScreenWidth(mContext) * 2);
          ObjectAnimator transY = ObjectAnimator
            .ofFloat(iconView, "translationY", 
              0, 
              - UIUtility.getScreenHeight(mContext) * 2);
          transY.setInterpolator(PathInterpolatorCompat
            .create(0.7f, 1f));
          ObjectAnimator rotation = ObjectAnimator
            .ofFloat(iconView, "rotation", -45, 0);
          rotation.setInterpolator(new DecelerateInterpolator());
          ObjectAnimator rotationX = ObjectAnimator
            .ofFloat(iconView, "rotationX", 0, 60);
          rotationX.setInterpolator(
            new DecelerateInterpolator());
      
          flyUpAnim.playTogether(transX, transY, rotationX,
              ObjectAnimator
                .ofFloat(iconView, "scaleX", 1, 0.5f),
              ObjectAnimator
                .ofFloat(iconView, "scaleY", 1, 0.5f),
              rotation
          );
          flyUpAnim.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
      
            }
      
            @Override
            public void onAnimationEnd(Animator animation) {
              // 飛機(jī)飛入動畫
              downPlaneAnimation(iconView);
            }
      
            @Override
            public void onAnimationCancel(Animator animation) {
      
            }
      
            @Override
            public void onAnimationRepeat(Animator animation) {
      
            }
          });
          flyUpAnim.start();
        }
      
        /**
         * 飛機(jī)飛入動畫
         */
        private void downPlaneAnimation(final View iconView) {
          final int offDistX = -iconView.getRight();
          final int offDistY = -UIUtility.dipTopx(mContext, 10);
          AnimatorSet flyDownAnim = new AnimatorSet();
          flyDownAnim.setDuration(500);
          ObjectAnimator transX1 = ObjectAnimator
            .ofFloat(iconView, "translationX", 
              UIUtility.getScreenWidth(mContext), offDistX);
          ObjectAnimator transY1 = ObjectAnimator
            .ofFloat(iconView, "translationY", 
              - UIUtility.getScreenHeight(mContext), 
              offDistY);
          transY1.setInterpolator(
            PathInterpolatorCompat.create(0.1f, 1f));
          ObjectAnimator rotation1 = ObjectAnimator
            .ofFloat(iconView, "rotation", 
              iconView.getRotation(), 0);
          rotation1.setInterpolator(
            new AccelerateInterpolator());
          flyDownAnim.playTogether(transX1, transY1,
              ObjectAnimator
                .ofFloat(iconView, "scaleX", 0.5f, 0.9f),
              ObjectAnimator
                .ofFloat(iconView, "scaleY", 0.5f, 0.9f),
              rotation1
          );
          flyDownAnim.addListener(
            new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
              iconView.setRotationY(180);
            }
      
            @Override
            public void onAnimationEnd(Animator animation) {
      
            }
      
            @Override
            public void onAnimationCancel(Animator animation) {
      
            }
      
            @Override
            public void onAnimationRepeat(Animator animation) {
      
            }
          });
      
          AnimatorSet flyInAnim = new AnimatorSet();
          flyInAnim.setDuration(500);
          flyInAnim.setInterpolator(
            new DecelerateInterpolator());
          ObjectAnimator tranX2 = ObjectAnimator
            .ofFloat(iconView, "translationX", 
              offDistX, iconX);
          ObjectAnimator tranY2 = ObjectAnimator
            .ofFloat(iconView, "translationY", 
              offDistY, iconY);
          ObjectAnimator rotationX2 = ObjectAnimator
            .ofFloat(iconView, "rotationX", 30, 0);
          flyInAnim.playTogether(tranX2, tranY2, rotationX2, 
          ObjectAnimator.ofFloat(iconView, "scaleX", 0.9f, 1f),
          ObjectAnimator.ofFloat(iconView, "scaleY", 0.9f, 1f));
          flyInAnim.setStartDelay(100);
          flyInAnim.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
              iconView.setRotationY(0);
            }
      
            @Override
            public void onAnimationEnd(Animator animation) {
      
            }
      
            @Override
            public void onAnimationCancel(Animator animation) {
      
            }
      
            @Override
            public void onAnimationRepeat(Animator animation) {
      
            }
          });
      
          AnimatorSet mFlyAnimator = new AnimatorSet();
          mFlyAnimator.playSequentially(flyDownAnim, flyInAnim);
          mFlyAnimator.start();
        }

      這樣一來紙飛機(jī)的進(jìn)入和點(diǎn)擊離開動畫就完成了。

      感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Android怎么實(shí)現(xiàn)紙飛機(jī)”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!


      本文題目:Android怎么實(shí)現(xiàn)紙飛機(jī)
      文章出自:http://www.ef60e0e.cn/article/pojdcs.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        荆门市| 瓦房店市| 安丘市| 玉溪市| 麻城市| 温州市| 青浦区| 元氏县| 荥经县| 钦州市| 科尔| 石阡县| 洛阳市| 通江县| 永川市| 海伦市| 和平县| 永和县| 得荣县| 亳州市| 尼勒克县| 密山市| 博罗县| 曲沃县| 梁平县| 德安县| 石棉县| 新兴县| 西和县| 大渡口区| 海丰县| 固安县| 东乌| 罗甸县| 白河县| 龙川县| 镇江市| 通城县| 岗巴县| 陇西县| 凤城市|