之前我使用TextView+Handler+动画,实现了一个简单的仿淘宝广告条的滚动,https://download.csdn.net/download/qq_35605213/9660825
无意中发现ViewFlipper这个控件,拿来一试;很轻松的就实现了文字的替换功能;

下载地址:点击打开链接

代码:

private ViewFlipper vf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vf = findViewById(R.id.vf);
vf.setFlipInterval(2000);//设置时间间隔
setData();
}
String datas[] = {"对Kotlin的第一印象"
,"Android.Kotlin的杀手锏"
,"Kotlin很简洁"
,"Kotlin很擅长“拿来主义"
,"其实我也就是走马观花"};
private void setData() {
for (int i = 0; i < datas.length; i++) {
TextView tv = new TextView(this);
tv.setText(datas[i]);
vf.addView(tv); //把需要滚动布局添加到ViewFlipper
}
vf.startFlipping(); //开始滚动
}

XML布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.admin.viewflipperdemo.MainActivity"> <ViewFlipper
android:id="@+id/vf"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="50dp"
/> </RelativeLayout>

只不过没有动画的效果,下面我再给它加上从下面滑进来和向上滑出去的动画;

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--进场动画-->
<translate
android:duration="300"
android:fromYDelta="100%p"
android:toYDelta="0"/>
<alpha
android:duration="500"
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--滑出动画-->
<translate
android:duration="400"
android:fromYDelta="0"
android:toYDelta="-100%p"/>
<alpha
android:duration="500"
android:fromAlpha="1.0"
android:toAlpha="0.0"/>
</set>
vf.setInAnimation(this,R.anim.in); //设置动画效果
vf.setOutAnimation(this,R.anim.out);

哈哈,这下效果就很像了;

不过淘宝是双条的,这个怎么实现呢?

private ViewFlipper vf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vf = findViewById(R.id.vf);
vf.setFlipInterval(2000);//设置时间间隔
vf.setInAnimation(this,R.anim.in);
vf.setOutAnimation(this,R.anim.out);
setData();
}
String datas[] = {"鹿皮绒高腰小西装裤子女九分阔腿裤侧边条纹"
,"显瘦休闲运动裤女春秋薄款直筒长裤宽松卫裤"
,"春季浅色格子裤女九分裤松紧腰捆绳宽松显瘦千鸟格哈伦休闲裤"
,"秋冬新款宽松毛呢小脚哈伦裤休闲裤女显瘦呢子长裤加厚款大码潮"
,"春秋季新款心型碎花松紧腰长袖中长款连衣裙女宽松显瘦波点裙"
,"运动服套装女春秋时尚2018新款修身韩版卫衣春季休闲跑步两件套潮"
,"职业装女装套装时尚西装连衣裙ol气质工作服女春秋正装套装裙"
,"秋季卫衣女韩版学生百搭上衣宽松显瘦连帽2017时尚新款长袖外套潮"
,"2鹿皮绒高腰小西装裤子女九分阔腿裤侧边条纹"};
private void setData() {
for (int i = 0; i < datas.length; i= i+2) { //一次遍历两条数据
View v = View.inflate(this,R.layout.item,null);
TextView tv1 = v.findViewById(R.id.tv1);
TextView tv2 = v.findViewById(R.id.tv2);
tv1.setText(datas[i]);
if (datas.length > i+1){
tv2.setText(datas[i+1]);
}else {
tv2.setVisibility(View.GONE);
}
vf.addView(v); //把需要滚动布局添加到ViewFlipper
}
vf.startFlipping(); //开始滚动
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools">
<ImageView
android:id="@+id/iv"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@mipmap/icon"
/>
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="@string/app_name"
android:textColor="#fd6300"
android:lines="1"
android:layout_toRightOf="@id/iv"
android:paddingLeft="12dp"
/>
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="@string/app_name"
android:textColor="#fd6300"
android:layout_toRightOf="@id/iv"
android:paddingLeft="12dp"
android:lines="1"
android:layout_below="@id/tv1"
android:layout_marginTop="8dp"
/> </RelativeLayout>

很容易看懂的,轻松完成;

属性介绍:
android:autoStart:   设置自动加载下一个View
android:flipInterval:设置View之间切换的时间间隔
android:inAnimation: 设置切换View的进入动画
android:outAnimation:设置切换View的退出动画

方法介绍:
isFlipping:     判断View切换是否正在进行
setFilpInterval:设置View之间切换的时间间隔
startFlipping:  开始View的切换,而且会循环进行
stopFlipping:   停止View的切换
setOutAnimation:设置切换View的退出动画
setInAnimation: 设置切换View的进入动画
showNext:       显示ViewFlipper里的下一个View

showPrevious:   显示ViewFlipper里的上一个View

随便抽取一下,方便使用:

public class UpView extends ViewFlipper {
private Context content;
public UpView(Context context) {
super(context);
init(context);
}
private int Interval = 3000; public UpView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
} private void init(Context context) {
this.content = context;
setFlipInterval(Interval);//设置时间间隔
setInAnimation(context,R.anim.in);
setOutAnimation(context,R.anim.out);
}
public void setInterval(int i){
Interval = i;
} /**
* 设置循环滚动的View数组
*/
public void setViews(final List<View> views) {
if (views == null || views.size() == 0) return;
removeAllViews();
for ( int i = 0; i < views.size(); i++) {
final int finalposition=i;
//设置监听回调
views.get(i).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
onItemClickListener.onItemClick(finalposition, views.get(finalposition));
}
}
});
addView(views.get(i));
}
startFlipping();
} private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public interface OnItemClickListener {
void onItemClick(int position, View view);
}
}

使用:

public class MainActivity extends AppCompatActivity implements UpView.OnItemClickListener {

    private UpView vf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vf = findViewById(R.id.vf);
setData();
vf.setOnItemClickListener(this);
}
String datas[] = {
"鹿皮绒高腰小西装裤子女九分阔腿裤侧边条纹"
,"显瘦休闲运动裤女春秋薄款直筒长裤宽松卫裤"
,"春季浅色格子裤女九分裤松紧腰捆绳宽松显瘦千鸟格哈伦休闲裤"
,"秋冬新款宽松毛呢小脚哈伦裤休闲裤女显瘦呢子长裤加厚款大码潮"
,"春秋季新款心型碎花松紧腰长袖中长款连衣裙女宽松显瘦波点裙"
,"运动服套装女春秋时尚2018新款修身韩版卫衣春季休闲跑步两件套潮"
,"职业装女装套装时尚西装连衣裙ol气质工作服女春秋正装套装裙"
,"秋季卫衣女韩版学生百搭上衣宽松显瘦连帽2017时尚新款长袖外套潮"};
private void setData() {
List<View> views = new ArrayList<>();
for (int i = 0; i < datas.length; i= i+2) { //一次遍历两条数据
View v = View.inflate(this,R.layout.item,null);
TextView tv1 = v.findViewById(R.id.tv1);
TextView tv2 = v.findViewById(R.id.tv2);
tv1.setText(datas[i]);
if (datas.length > i+1){
tv2.setText(datas[i+1]);
}else {
tv2.setVisibility(View.GONE);
}
views.add(v);
}
vf.setViews(views);
} @Override
public void onItemClick(int position, View view) {
Log.i("TAG",position+"");
}
}

Android仿淘宝头条滚动广告条的更多相关文章

  1. Android 仿淘宝头条竖直跑马灯式新闻标题及“分页思想

    在淘宝App的首页中间位置,有一块小小的地方在不知疲倦地循坏滚动着头条标题(见下图的红框区域),这样的设计无疑能够在有限的手机屏幕上展示更丰富的内容.而实现这一功能需要用到的控件就是我在上一篇文章中提 ...

  2. JS仿淘宝详情页菜单条智能定位效果

    类似于淘宝详情页菜单条智能定位 对于每个人来说并不陌生!如下截图所示:红色框的那部分! 基本原理: 是用JS侦听滚动事件,当页面的滚动距离(页面滚动的高度)大于或者等于 "对象"( ...

  3. 【angularjs】使用angularjs模拟淘宝首页-淘宝头条滚动效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Android仿淘宝继续上拉进入商品详情页的效果,使用双Fragment动画切换;

    仿淘宝继续上拉进入商品详情页的效果,双Fragment实现: 动画效果: slide_above_in.xml <?xml version="1.0" encoding=&q ...

  5. Android -- 仿淘宝广告条滚动

    1,在赶项目的时候我们经常会实现下面这个功能,及添加滚动条广告广播,先看一下淘宝的效果 2,这次实现效果主要使用Android自带的ViewFlipper控件,先来看一下我们的它的基本属性和基本方法吧 ...

  6. Android仿淘宝购物车demo

    夏的热情渐渐退去,秋如期而至,丰收的季节,小编继续着实习之路,走着走着,就走到了购物车,逛过淘宝或者是京东的小伙伴都知道购物车里面的宝贝可不止一件,对于爱购物的姑娘来说,购物车里面的商品恐怕是爆满,添 ...

  7. Android 仿淘宝属性标签页

    直接看效果图相信这样的效果很多,我之前在网上找了很久没找到自己想要的! <?xml version="1.0" encoding="utf-8"?> ...

  8. 自定义控件 淘宝头条【ViewFlipper】

    简易版 代码 ); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Acti ...

  9. Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片

    Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在Vie ...

随机推荐

  1. [转]JDK动态代理

    代理模式         代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间 ...

  2. egg 官方文档之:框架扩展(Application、Context、Request、Response、Helper的访问方式及扩展)

    地址:https://eggjs.org/zh-cn/basics/extend.html Application app 对象指的是 Koa 的全局应用对象,全局只有一个,在应用启动时被创建. 访问 ...

  3. 在外网访问家里面的电脑 和 DMZ

    方法1:使用 MDZ (  demilitarized zone), 中文意思 非武装的区域.我们的家用电脑一般都在 路由器所在的 C类内网(192.X.X.X 的 ip).外网是不能直接访问内网的. ...

  4. php调用Redis队列使用例子

    1.Controller顶部引入use think\Queue; 2.Controller调用Redis任务 // 1.当前任务将由哪个类来负责处理. $job = 'app\api\job\Resu ...

  5. struts中jsp表单控件命名注意

    在jsp页面中写了这样的一个表单控件 <td>维修任务码</td><td><input type="text" id="mTas ...

  6. Linux Centos配置ssh客户端工具putty

      配置ssh客户端工具putty 1.直接点击putty.exe文件 2.配置putty 3.配置putty编码 4.配置putty字体大小 5.配置putty样式 6.保存配置信息 7.配置MTp ...

  7. file命令详解

    Linux file命令 Linux file命令用于辨识文件类型. 通过file指令,我们得以辨识该文件的类型 用法: file [-bchikLNnprsvz0] [--apple] [--mim ...

  8. [转] Centos7 yum lock,无法上网问题,以及安装python3.5

    centos 7 无法上网问题 转自 http://www.cnblogs.com/katios/p/5660336.html 博主本着学无止境的精神在虚拟机上安装了一个centos7 来敲敲命令行. ...

  9. php+phpspreadsheet读取Excel数据存入mysql

    先生成Excel模板,然后导入Excel数据到mysql,每条数据对应图片上传到阿里云 <?php /** * Created by PhpStorm. * User: Administrato ...

  10. Block Design 小技巧之添加RTL代码到block_design

    Block Design 小技巧之添加RTL代码到block_design 1.首先得打开Block Design,右击RTL文件,才会出现Add module to Block Design选项. ...