android渐变切换图片
在以前的时候轮播图居多,现在轮播图相对来说使用减少,更偏爱另一种就是渐变替换切换图片,就是一个自定义类,文章最后附上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渐变切换图片相关推荐
- android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解
先给最终效果图: 当我们在最下边的gallery中切换图片时,上面的大图片会自动切换,切换时有动画效果哦,很简单的一个程序,有待完善更多的功能! activity代码: package cn.com. ...
- Android循环切换图片(广告栏)ConvenientBanner库使用
ConvenientBanner 通用的广告栏控件,让你轻松实现广告头效果.支持无限循环,可以设置自动翻页和时间(而且非常智能,手指触碰则暂停翻页,离开自动开始翻页.你也可以设置在界面onPause的 ...
- android自动切换图片,android-自动切换背景图片
因为好用,所以值得收藏. >>>> >>>>> 一.创建切换背景布局类 public class LaunchAppAnimatedBgRe ...
- 【转】Android android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)...
首先我们还是看一些示例:(网易,新浪,百度) 下面我简单的介绍下实现方法:其实就是listview addHeaderView.只不过这个view是一个可以切换图片的view,至于这个vie ...
- Android 点击按钮切换图片
Android 点击按钮切换图片 效果如图: 点击后: 主要代码: //切换图片 but1.setBackgroundResource(R.drawable.qq1); 全部代码: public cl ...
- Android左右滑动切换图片
简要说明 本文采用ImageSwitcher实现左右滑动切换图片.首先调用setFactory方法,设置视图工厂:然后设置手指触碰监听,判断左滑右滑进而切换图片. 本地图片 xml <?xml ...
- Android传感器的使用(1)——摇一摇切换图片
在android应用程序中,很多时候需要与用户的动作行为进行互动,或者指定用户做某些行为从而完成某些动作,其中的一些行为就是触发了安卓当中的传感器,然后通过安卓封装的传感器动作,能够获取到用户的行为, ...
- android 点击按钮来回切换图片
android 点击切换图片 适合初学者,没什么好说的,很简单,不过方法我觉得挺精妙的. 1.添加图片 气死我了,选下面那个会报错(好像是因为分辨率太高(?)还是像素太高,忘了) activity_m ...
- android 点击图片进行切换
点击图片进行切换 除了可以用按钮来进行切换,android还有一个图片按钮(ImageButton)控件,但Button也可以放置图片,我觉得还是Button好用一点 1.添加图片 复制一下之前的不犯 ...
最新文章
- 2020 图算法工程师面试基础、要点
- JavaScript 的面向对象编程
- WindowManager如何被Android深度解析(2)
- 数据结构与算法笔记(八)—— 插入排序
- memcached介绍,安装与基本使用
- cassandra生产监控_碎玻璃:诊断生产Cassandra问题
- docker 安装 nacos/nacos-server 镜像并配置本地数据库
- 天池 在线编程 订单分配(回溯)
- logback日志pattern_logback-自定义Pattern模板
- enum关键字——C语言深度剖析
- python 在线培训费用-python培训班费用
- STM32+W5500
- ubuntu中安装oracle sun java.
- php易盾,内容审核统一管控!网易易盾智能审核管理系统开放试用
- Virtio 基本概念和设备操作
- 微软2012年4月最有价值专家(MVP)名单 51CTO十四位用户当选
- BaiduOCR实现身份证,银行卡,机动车牌,图像审核等识别
- 网上商城购物系统设计与实现(Java+Web+SSM+MySQL)
- CPU GPU天梯图
- 如何微软的CRM数据导入软件可以改善你的企业
热门文章
- 使用JAVA输入一个整数,输出整数的阶乘
- 3900x做服务器性能怎么样,使用后点评3800x和3900x区别大吗?哪个好?老司机透漏爆料...
- 个人技术总结——uniapp中editor组件的使用并用图床上传图片
- 辗转相除法的原理解析与实现
- 微搭低代码自定义组件开发教程
- 【控制】滑模控制,小例子,有程序有结果图
- kswapd0病毒查杀过程
- 如果孔乙己是程序员......
- ArcGis API for JavaScript学习——加载地图
- dataframe保存至csv乱码