在以前的时候轮播图居多,现在轮播图相对来说使用减少,更偏爱另一种就是渐变替换切换图片,就是一个自定义类,文章最后附上DEMO

成品图展示:

首先这里直接上已经定义好的类,代码比较简单:

//自定义渐变类
public class GradientUI 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=5000;//动画间隔时间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);}//添加到图片的下边LayoutParams rlp = new LayoutParams(-1,-2);rlp.bottomMargin = dip2px(mContext, 5);rlp.addRule(ALIGN_PARENT_BOTTOM);this.addView(linearLayout, rlp);}}/*** 根据手机的分辨率从 dip 的单位 转成为 px(像素)*/public static int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}/*** 设置图片view* @param imageViews*/public void setImageViews(List<ImageView> imageViews) {this.imageViews = imageViews;for (int i = 0; i < imageViews.size(); i++) {LayoutParams layoutParams = new LayoutParams(-1,-1);addView(imageViews.get(i),layoutParams);}setonClick();cratePoint();createAnim();start();}/*** 开启动画*/private void start() {final int size = imageViews.size();handler.post(new Runnable() {@Overridepublic 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);}});}/*** 创建动画*/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() {@Overridepublic 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;}/** 创建一个淡出缩小的动画 */public  Animation createZoomOutAwayAnim() {AnimationSet ret;Animation anim;ret = new AnimationSet(false);// 创建一个淡出的动画anim = new AlphaAnimation(1f, 0f);anim.setDuration(time);anim.setInterpolator(new DecelerateInterpolator());ret.addAnimation(anim);// 创建一个缩小的动画/*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;}/** 创建一个淡入缩小的动画 */public  Animation createZoomOutNearAnim() {AnimationSet ret;Animation anim;ret = new AnimationSet(false);// 创建一个淡入的动画anim = new AlphaAnimation(0f, 1f);anim.setDuration(time);anim.setInterpolator(new LinearInterpolator());ret.addAnimation(anim);// 创建一个缩小的动画/*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;}
}

其次、定义好后在,在XML中布局:

  <com.st.tcnew.view.user.view.Gradientandroid:id="@+id/gradient"android:layout_width="match_parent"android:layout_height="350sp"/>

最后开始调用:

                        String Url = "www.baidu.com.png";//网络图片地址ImageView imageView = new ImageView(getActivity());  //创建imageview
//                        imageView.setImageResource(R.drawable.image1);//添加本地固定图片ImageUtil.setShowImage(getActivity(), Url, imageView);//添加网络地址图片ImageView imageView2 = new ImageView(getActivity());ImageUtil.setShowImage(getActivity(), Url, imageView);ImageView imageView3 = new ImageView(getActivity());ImageUtil.setShowImage(getActivity(), Url, imageView);ImageView imageView4 = new ImageView(getActivity());ImageUtil.setShowImage(getActivity(), Url, imageView);List<ImageView> list = new ArrayList<>();list.add(imageView);list.add(imageView2);list.add(imageView3);list.add(imageView4);//设置图片即可gradient.setImageViews(list);//gradient展示的控件id

这样就完成了一个简单的渐变替换

DEMO下载   原始连接:android原生渐变切换图片-Android文档类资源-CSDN下载

-END

android渐变切换图片相关推荐

  1. android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解

    先给最终效果图: 当我们在最下边的gallery中切换图片时,上面的大图片会自动切换,切换时有动画效果哦,很简单的一个程序,有待完善更多的功能! activity代码: package cn.com. ...

  2. Android循环切换图片(广告栏)ConvenientBanner库使用

    ConvenientBanner 通用的广告栏控件,让你轻松实现广告头效果.支持无限循环,可以设置自动翻页和时间(而且非常智能,手指触碰则暂停翻页,离开自动开始翻页.你也可以设置在界面onPause的 ...

  3. android自动切换图片,android-自动切换背景图片

    因为好用,所以值得收藏.  >>>>  >>>>>  一.创建切换背景布局类 public class LaunchAppAnimatedBgRe ...

  4. 【转】Android android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)...

    首先我们还是看一些示例:(网易,新浪,百度)      下面我简单的介绍下实现方法:其实就是listview addHeaderView.只不过这个view是一个可以切换图片的view,至于这个vie ...

  5. Android 点击按钮切换图片

    Android 点击按钮切换图片 效果如图: 点击后: 主要代码: //切换图片 but1.setBackgroundResource(R.drawable.qq1); 全部代码: public cl ...

  6. Android左右滑动切换图片

    简要说明 本文采用ImageSwitcher实现左右滑动切换图片.首先调用setFactory方法,设置视图工厂:然后设置手指触碰监听,判断左滑右滑进而切换图片. 本地图片 xml <?xml ...

  7. Android传感器的使用(1)——摇一摇切换图片

    在android应用程序中,很多时候需要与用户的动作行为进行互动,或者指定用户做某些行为从而完成某些动作,其中的一些行为就是触发了安卓当中的传感器,然后通过安卓封装的传感器动作,能够获取到用户的行为, ...

  8. android 点击按钮来回切换图片

    android 点击切换图片 适合初学者,没什么好说的,很简单,不过方法我觉得挺精妙的. 1.添加图片 气死我了,选下面那个会报错(好像是因为分辨率太高(?)还是像素太高,忘了) activity_m ...

  9. android 点击图片进行切换

    点击图片进行切换 除了可以用按钮来进行切换,android还有一个图片按钮(ImageButton)控件,但Button也可以放置图片,我觉得还是Button好用一点 1.添加图片 复制一下之前的不犯 ...

最新文章

  1. 2020 图算法工程师面试基础、要点
  2. JavaScript 的面向对象编程
  3. WindowManager如何被Android深度解析(2)
  4. 数据结构与算法笔记(八)—— 插入排序
  5. memcached介绍,安装与基本使用
  6. cassandra生产监控_碎玻璃:诊断生产Cassandra问题
  7. docker 安装 nacos/nacos-server 镜像并配置本地数据库
  8. 天池 在线编程 订单分配(回溯)
  9. logback日志pattern_logback-自定义Pattern模板
  10. enum关键字——C语言深度剖析
  11. python 在线培训费用-python培训班费用
  12. STM32+W5500
  13. ubuntu中安装oracle sun java.
  14. php易盾,内容审核统一管控!网易易盾智能审核管理系统开放试用
  15. Virtio 基本概念和设备操作
  16. 微软2012年4月最有价值专家(MVP)名单 51CTO十四位用户当选
  17. BaiduOCR实现身份证,银行卡,机动车牌,图像审核等识别
  18. 网上商城购物系统设计与实现(Java+Web+SSM+MySQL)
  19. CPU GPU天梯图
  20. 如何微软的CRM数据导入软件可以改善你的企业

热门文章

  1. 使用JAVA输入一个整数,输出整数的阶乘
  2. 3900x做服务器性能怎么样,使用后点评3800x和3900x区别大吗?哪个好?老司机透漏爆料...
  3. 个人技术总结——uniapp中editor组件的使用并用图床上传图片
  4. 辗转相除法的原理解析与实现
  5. 微搭低代码自定义组件开发教程
  6. 【控制】滑模控制,小例子,有程序有结果图
  7. kswapd0病毒查杀过程
  8. 如果孔乙己是程序员......
  9. ArcGis API for JavaScript学习——加载地图
  10. dataframe保存至csv乱码