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

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网站在线| 亚洲男人av天堂东京热| 日韩av亚洲在线观看| 五月婷婷综合中文字幕在线| 亚洲国产视频中文字幕| 色婷婷综合激情一区二区| 欧美日韩亚洲中文国产| 伊人亚洲中文一区二区| 日本人的黄色录像视频| 蜜臀av成人精品蜜臀av| 欧美色视频综合在线观看| 国产精品一区二区三区激情| 色老头视频一区二区三区| 日韩中文字幕欧美国产| 亚洲男人av天堂东京热| 黄色污网站在线观看免费| 日韩欧美精品久久黄| 久久国产精品乱码电影| 亚洲一区免费在线视频| 亚洲精品一级黄色片| 国产av剧情日韩精品| 国产又粗又硬又长又爽在线观看| 秒播视频午夜福利在线观看| 国产精品一区日韩专区| 成人黄片在线免费播放| 男男啪啪猛进猛出无遮挡| 色婷婷一区二区三区网站| 一本久道久久综合久久鬼色| 日韩精品一二区电影| 外国男人搞亚洲女人在线| 熟妇人妻中文字幕在线| 日韩黄色资源在线观看| 美国一级二级三级黄片| 日韩三级av黄片在线| 国产精品国产三级国产专区| 日韩一级久久精品理论| 韩日男人女人性生活视频| 国内精品老年人视频网站| 国产精品熟女在线视频|