欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

android控件實現(xiàn)多張圖片漸變切換

本來項目是用的viewpager實現(xiàn)的輪播滾動,但是客戶覺得輪播的效果太大眾化了,于是就要我們改成漸變切換的效果。聽到這需求,我最先想到是給viewpager設置切換動畫,但是無論怎么設置動畫,都要手動切換的時候才有效果。于是我就自定義了一個控件,利用淡入淡出動畫實現(xiàn)了這效果,還是先上效果圖,沒效果圖說再多也沒用。

創(chuàng)新互聯(lián)公司服務項目包括西秀網(wǎng)站建設、西秀網(wǎng)站制作、西秀網(wǎng)頁制作以及西秀網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,西秀網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到西秀省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

android控件實現(xiàn)多張圖片漸變切換

public class Gradient extends RelativeLayout {

  private List<ImageView> imageViews;
  private List<Animation> outAnim;//淡出動畫
  private List<Animation> inAnim;//淡入動畫
  private Context mContext;
  private Handler handler = new Handler(Looper.getMainLooper());
  private int couot;
  private int currentIndex;//當前的頁面
  private LinearLayout linearLayout;
  private onClickListner listner;
  private long time=3000;//動畫間隔時間


  public Gradient(Context context) {
    this(context, null);
  }

  public Gradient(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.mContext = context;
  }

  /**
   * 畫點
   */
  public void cratePoint() {
    if (null != imageViews && imageViews.size() > 0) {
      int size = imageViews.size();

      linearLayout = new LinearLayout(mContext);
      linearLayout.setOrientation(LinearLayout.HORIZONTAL);
      linearLayout.setGravity(Gravity.CENTER);
      // 添加圖片
      for (int i = 0; i < size; i++) {
        // 設置圓點
        View viewPoint = new View(mContext);
        viewPoint.setBackgroundResource(R.drawable.point_background);
        int weight = dip2px(mContext, 5);
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(weight, weight);
        lp.leftMargin = weight;
        viewPoint.setLayoutParams(lp);
        viewPoint.setEnabled(false);
        linearLayout.addView(viewPoint);
      }
      View childAt = linearLayout.getChildAt(0);
      if (null != childAt) {
        childAt.setEnabled(true);
      }
      //添加到圖片的下邊
      RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(-1,-2);
      rlp.bottomMargin = dip2px(mContext, 5);
      rlp.addRule(ALIGN_PARENT_BOTTOM);
      this.addView(linearLayout, rlp);

    }


  }

  /**
   * 根據(jù)手機的分辨率從 dip 的單位 轉(zhuǎn)成為 px(像素)
   */
  public static int dip2px(Context context, float dpValue) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (dpValue * scale + 0.5f);
  }

  /**
   * 設置圖片
   * @param imageViews
   */
  public void setImageViews(List<ImageView> imageViews) {
    this.imageViews = imageViews;
    for (int i = 0; i < imageViews.size(); i++) {
      RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(-1,-1);
      addView(imageViews.get(i),layoutParams);
    }
    setonClick();
    cratePoint();
    createAnim();
    start();

  }

  /**
   * 開啟動畫
   */
  private void start() {
    final int size = imageViews.size();
    handler.post(new Runnable() {
      @Override
      public void run() {
        final int i = couot % size;
        //解決點擊事件的沖突
        for (int j = 0; j < size; j++) {


          if (j == i) {
            imageViews.get(i).setClickable(true);


          } else {
            imageViews.get(i).setClickable(false);
          }
        }
        if (couot < size) {
          if (i == size - 1) {

            ImageView imageView = imageViews.get(0);
            imageView.startAnimation(outAnim.get(0));

            ImageView imageView2 = imageViews.get(size - 1);
            imageView2.startAnimation(inAnim.get(size - 1));


          } else {
            //當前的淡出,下一張淡入
            ImageView imageView = imageViews.get(size - 1 - i);
            imageView.startAnimation(outAnim.get(size - 1 - i));



          }
        } else {
          if (i == size - 1) {
            //當顯示到最后一張的時候,要跳到第一張
            ImageView imageView = imageViews.get(0);
            imageView.startAnimation(outAnim.get(0));

            ImageView imageView2 = imageViews.get(size - 1);
            imageView2.startAnimation(inAnim.get(size - 1));


          } else {
            //當前的淡出,下一張淡入
            ImageView imageView = imageViews.get(size - 1 - i);
            imageView.startAnimation(outAnim.get(size - 1 - i));

            ImageView imageView2 = imageViews.get(size - 2 - i);
            imageView2.startAnimation(inAnim.get(size - 2 - i));

          }
        }

        currentIndex = i;
        linearLayout.getChildAt(currentIndex % size).setEnabled(false);
        currentIndex++;
        linearLayout.getChildAt(currentIndex % size).setEnabled(true);
        couot++;
        handler.postDelayed(this, time);
      }
    });
  }

  /**
   * 創(chuàng)建動畫
   */
  private void createAnim() {
    outAnim = new ArrayList<>();
    inAnim = new ArrayList<>();
    for (int i = 0; i < imageViews.size(); i++) {
      Animation zoomOutAwayAnim = createZoomOutAwayAnim();
      zoomOutAwayAnim.setFillAfter(true);
      outAnim.add(zoomOutAwayAnim);

      Animation zoomOutNearAnim = createZoomOutNearAnim();
      zoomOutNearAnim.setFillAfter(true);
      inAnim.add(zoomOutNearAnim);

    }
  }

  /**
   * 設置點擊事件
   */
  public void setonClick() {
    for (int i = 0; i < imageViews.size(); i++) {
      imageViews.get(i).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
          if (listner != null) {
            listner.setonClick((currentIndex) % imageViews.size());
          }

        }
      });
    }
  }

  public interface onClickListner{

    void setonClick(int position);
  }

  /**
   * 設置動畫播放和handler延遲時間
   * @param time
   */
  public void setTime(long time) {
    this.time = time;
  }

  public void setListner(onClickListner listner) {
    this.listner = listner;
  }

  /** 創(chuàng)建一個淡出縮小的動畫 */
  public Animation createZoomOutAwayAnim() {
    AnimationSet ret;
    Animation anim;
    ret = new AnimationSet(false);
    // 創(chuàng)建一個淡出的動畫
    anim = new AlphaAnimation(1f, 0f);
    anim.setDuration(time);
    anim.setInterpolator(new DecelerateInterpolator());
    ret.addAnimation(anim);
    // 創(chuàng)建一個縮小的動畫
    /*anim = new ScaleAnimation(1, 0, 1, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    anim.setDuration(MEDIUM);
    anim.setInterpolator(new DecelerateInterpolator());
    ret.addAnimation(anim);*/
    return ret;
  }
  /** 創(chuàng)建一個淡入縮小的動畫 */
  public Animation createZoomOutNearAnim() {
    AnimationSet ret;
    Animation anim;
    ret = new AnimationSet(false);
    // 創(chuàng)建一個淡入的動畫
    anim = new AlphaAnimation(0f, 1f);
    anim.setDuration(time);
    anim.setInterpolator(new LinearInterpolator());
    ret.addAnimation(anim);
    // 創(chuàng)建一個縮小的動畫
    /*anim = new ScaleAnimation(3, 1, 3, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    anim.setDuration(MEDIUM);
    anim.setInterpolator(new DecelerateInterpolator());
    ret.addAnimation(anim);*/
    return ret;
  }
}

這個控件的使用非常簡單只要在布局文件中使用我們自定義的控件,然后調(diào)用setTime設置動畫切換的時間,setListener設置圖片的點擊事件,setImagevies設置圖片就可以實現(xiàn)效果.考慮到內(nèi)存泄漏的問題,只要在ondestry方法里面調(diào)用stop方法即可,點擊下載Demo

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

當前題目:android控件實現(xiàn)多張圖片漸變切換
地址分享:http://aaarwkj.com/article28/gippjp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站建設、動態(tài)網(wǎng)站、網(wǎng)站設計公司、云服務器建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
国产精品乱码一区二区视频| 久热在线这里只有精品| 亚洲熟妇精品一区二区| 国产精品一区二区三区国产| 日操夜操天天操夜夜操| 国产精品一区午夜福利| 国产一区二区三区在线视频播放| 亚洲av乱码一区二区三| 福利一区福利二区视频| 五月婷婷丁香在线观看| 91欧美一区二区在线视频| 国产精品老熟女一区二区| 91精彩啦在线看国产| 日本午夜激情一区二区| 亚洲五月婷婷久久综合| 韩国午夜理伦三级好看| 久久精品国产亚洲av高清观看| 美女诱惑福利视频久久久| 日韩精品福利片午夜免费| 青青草视频在线针对华人| 国欧美一区二区三区| 日韩精品极品在线视频观看免费| 少妇高潮在线观看免费| 欧美日韩亚洲激情一区| 国产精品成人免费久久黄| 欧美国产综合欧美一区二区三区| 蜜臀av一区二区在线观看| 中文字幕五月久久婷热| 久久精品性少妇一区=区三区| 日本中文字幕一二三四区| 国产亚洲国产av网站在线| 精品一区二区久久久久久网精 | 亚洲av男人电影天堂| 国产精品播放一区二区三区| 97超碰国产在线观看| 综合久久精品亚洲天堂| 日韩在线观看视频有码| 亚洲国产精品一区二区成人| 亚洲av网站一区二区三区| 精品在线中文字幕不卡| 成人黄性视频免费网看|