广告自动滚动
来源:互联网 发布:中小型企业网络拓扑图 编辑:程序博客网 时间:2024/05/16 14:07
最近做项目,遇到类似广告自动上下滚动的效果,每次滚动一行,一行就是一个标题。
开始呢,使用到listview里面的一个方法smoothScrollToPosition,会有bug,然后公司一个同事写的一个自定义的scrollview来写,效果不错,拿来用用。实现起来很简单的
import android.content.Context;import android.graphics.Color;import android.os.Handler;import android.os.Message;import android.text.TextUtils;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;import android.widget.LinearLayout;import android.widget.ScrollView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2016/1/27. */public class NewScrollView extends ScrollView { private static final String TAG = "NewsScrollView"; private static int HEIGHT = 0; /* 控件高度 */ private static final int TIME_OFFSET = 2000; /* 滚动速度 */ private static Context context; private List<String> datas = new ArrayList<String>(); /* 数据源(需要改成实体) */ private int scroll_index; // 当前新闻滚动到的条数 public NewsCallback callback; public static int dipToPixels(float dip) { float scale = context.getResources().getDisplayMetrics().density; return (int) (dip * scale + 0.5f); } public NewScrollView(Context context) { super(context); this.context = context; HEIGHT = dipToPixels(20); } public NewScrollView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; HEIGHT = dipToPixels(20); } /* 初始化 */ public void initialize(List<String> datas) { this.datas = datas; this.setLayoutParams(new ScrollView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, HEIGHT)); this.datas.add(datas.get(0)); this.setVerticalScrollBarEnabled(false); this.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); scroll_index = 0; addChilds(); } public void setCallback(NewsCallback callback) { this.callback = callback; } private void addChilds() { LinearLayout container = new LinearLayout(context); container.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, HEIGHT * datas.size())); container.setOrientation(LinearLayout.VERTICAL); this.addView(container); // 创建textview,将其放在linearlayout里面 for (int i = 0; i < datas.size(); i++) { TextView tvChild = new TextView(context); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, HEIGHT); layoutParams.setMargins(20, 0, 20, 0); // 设置每行要显示textview的一些属性 tvChild.setLayoutParams(layoutParams); tvChild.setText(datas.get(i)); tvChild.setTextColor(Color.BLACK); tvChild.setSingleLine(true); tvChild.setEllipsize(TextUtils.TruncateAt.END); tvChild.setTextSize(14); container.addView(tvChild); tvChild.setTag(i); tvChild.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); } this.post(new Runnable() { @Override public void run() { timer.removeMessages(0); timer.sendEmptyMessageDelayed(0, TIME_OFFSET); } }); } /* 滚动逻辑 */ private Handler timer = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (scroll_index == datas.size() - 1) { scroll_index = 0; /* 滚动到了最后一页 */ scrollTo(0, 0); scroll_index++; } else { scroll_index++; } // 滚动scrollview smoothScrollTo(0, HEIGHT * scroll_index); timer.sendEmptyMessageDelayed(0, TIME_OFFSET); } }; public interface NewsCallback { void onClickNews(int position); }}
这是自定义的scrollview,用的时候调用initialize(List<String>datas),放入string的集合,就可以了,当然有具体特定需求改改自定义的scrollview就可以了。
具体实现就是,再要放入广告滚动的地方,加入自定义scrollview,传入list集合,传入进集合后,会在这个集合后面多加入一条数据(第一条数据)
this.datas.add(datas.get(0));为了就是滑动到最后一条数据的时候,又滚动到了第一页,Handler里面有看到。addChilds()方法中,先为scrollview加入一个线性布局高度为集合高度*每一行的高度,然后为这个布局添加textview动态gif图不知道怎么弄,所有就没有图了
0 0
- 广告自动滚动
- Android 循环自动滚动广告
- iOS 添加滚动scrollView自动滚动广告页
- 【iOS_GitHub】banner(广告页/循环滚动广告图片/无限循环自动滚动卡片)
- 广告滚动
- 通过滚动条向下滚动时,DIV广告自动跟着向下滚动,并且点击置顶
- ViewPager实现可以自动滚动的广告展示
- 图片滚动广告
- 定时滚动广告
- 横向不间断滚动广告
- 滚动图片广告
- 对联不滚动广告
- 对联滚动广告
- js滚动广告效果
- 滚动的对联广告
- js滚动广告效果
- js滚动广告效果
- 滚动的对联广告
- ArcMap常用参数设置
- android双向滑动冲突处理及解决方案
- [手游新项目历程]第9天-webSocket 包头:字符串129,二进制130
- JavaScript 中的相等性判断
- 【Linux】Linux操作系统的安装
- 广告自动滚动
- String,StringBuffer与StringBuilder之间的区别
- 仿美团商品选购下拉菜单实现
- [手游新项目历程]第8天-websocket打包
- GDFZOJ 道路修建
- Maven:Generating Project in Batch mode 卡住问题
- [手游新项目历程]第7天-读取二进制的char*数据to整形
- Android库AAR
- Python heap - priority queue