垂直滚动跑马灯AutoScrollTextView
来源:互联网 发布:淘宝客拉人进群技巧 编辑:程序博客网 时间:2024/05/17 03:39
package cn.test.textview;import android.content.Context;import android.graphics.Camera;import android.graphics.Matrix;import android.os.Handler;import android.text.TextUtils;import android.util.AttributeSet;import android.view.Gravity;import android.view.View;import android.view.animation.AccelerateInterpolator;import android.view.animation.Animation;import android.view.animation.Transformation;import android.widget.TextSwitcher;import android.widget.TextView;import android.widget.ViewSwitcher;import java.util.List;/** * Created by Administrator on 2017/12/11. */public class AutoScrollTextView extends TextSwitcher implements ViewSwitcher.ViewFactory{ private Context mContext; //mInUp,mOutUp分别构成向下翻页的进出动画 private Rotate3dAnimation mInUp; private Rotate3dAnimation mOutUp; private Handler handler; private Runnable runnable; private List<String> list; private int position = 0; private int delayedTime = 3000;//滚动间隔 private ItemClickLisener lisener; public AutoScrollTextView(Context context) { this(context, null); } public AutoScrollTextView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; init(); } private void init() { setFactory(this); mInUp = createAnim(true, true); mOutUp = createAnim(false, true); setInAnimation(mInUp);//当View显示时动画资源ID setOutAnimation(mOutUp);//当View隐藏是动画资源ID。 //采用handler进行计时滚动 handler = new Handler(); runnable = new Runnable() { @Override public void run() { position++; if (position == list.size()) position = 0; if (list == null) return; //设置显示数据并滚动 next(); setText(list.get(position)); handler.postDelayed(runnable, delayedTime); } }; } private Rotate3dAnimation createAnim( boolean turnIn, boolean turnUp){ Rotate3dAnimation rotation = new Rotate3dAnimation(turnIn, turnUp); rotation.setDuration(1200);//执行动画的时间 rotation.setFillAfter(false);//是否保持动画完毕之后的状态 rotation.setInterpolator(new AccelerateInterpolator());//设置加速模式 return rotation; } /** * 设置滚动数据集合 * * @param list */ public void setList(List<String> list) { this.list = list; } /** * 开始滚动 */ public void startScroll() { position = 0; handler.post(runnable); } /** * 开始滚动 */ public void startScroll(int delayedTime) { this.delayedTime = delayedTime; position = 0; handler.post(runnable); } /** * 停止滚动 */ public void stopScroll() { handler.removeCallbacks(runnable); } /** * 设置监听 * @return */ public void setClickLisener(ItemClickLisener lisener){ this.lisener=lisener; } //这里返回的TextView,就是我们看到的View,可以设置自己想要的效果 public View makeView() { TextView textView = new TextView(mContext); textView.setGravity(Gravity.LEFT); textView.setTextSize(20); textView.setSingleLine(true); textView.setGravity(Gravity.CENTER_VERTICAL); textView.setEllipsize(TextUtils.TruncateAt.END); textView.setTextColor(mContext.getResources().getColor(R.color.color666666)); textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if(lisener!=null){ lisener.onClick(position); } } }); return textView; } //定义动作,向上滚动翻页 public void next(){ //显示动画 if(getInAnimation() != mInUp){ setInAnimation(mInUp); } //隐藏动画 if(getOutAnimation() != mOutUp){ setOutAnimation(mOutUp); } } class Rotate3dAnimation extends Animation { private float mCenterX; private float mCenterY; private final boolean mTurnIn; private final boolean mTurnUp; private Camera mCamera; public Rotate3dAnimation(boolean turnIn, boolean turnUp) { mTurnIn = turnIn; mTurnUp = turnUp; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); mCamera = new Camera(); mCenterY = getHeight() ; mCenterX = getWidth() ; } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final float centerX = mCenterX ; final float centerY = mCenterY ; final Camera camera = mCamera; final int derection = mTurnUp ? 1: -1; final Matrix matrix = t.getMatrix(); camera.save(); if (mTurnIn) { camera.translate(0.0f, derection *mCenterY * (interpolatedTime - 1.0f), 0.0f); } else { camera.translate(0.0f, derection *mCenterY * (interpolatedTime), 0.0f); } camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } } public interface ItemClickLisener{ void onClick(int position); }}
使用:
text = (AutoScrollTextView) findViewById(R.id.text);text.setText(name.get(0));text.setList(name);text.startScroll();text.setClickLisener(new AutoScrollTextView.ItemClickLisener() { @Override public void onClick(int position) { Toast.makeText(getApplicationContext(),name.get(position),Toast.LENGTH_SHORT).show(); }});
@Overrideprotected void onDestroy() { super.onDestroy(); text.stopScroll();}
阅读全文
0 0
- 垂直滚动跑马灯AutoScrollTextView
- 垂直滚动公告(垂直跑马灯)
- ios 垂直方向跑马灯 循环滚动
- TextView垂直方向无限滚动还有跑马灯效果
- android textview 垂直滚动and水平跑马灯
- Android垂直方向滚动的跑马灯,带gif
- ViewFlipper垂直跑马灯
- 垂直跑马灯效果
- 自定义View实现文字跑马灯效果(垂直滚动和水平滚动)
- 垂直跑马灯&水平跑马灯
- 水平跑马灯&垂直跑马灯
- 滚动跑马灯问题
- Android中TextView实现垂直滚动(轮换效果,非跑马灯)
- Android 自定义控件:垂直滚动的TextView实现竖向跑马灯效果
- 【Android控件】垂直滚动广告栏控件实现(跑马灯效果)
- 自定义垂直跑马灯LinearLayout
- Android垂直跑马灯效果
- android 垂直的跑马灯
- 关于ThinkPHP3.2中连贯操作where的说明
- Unity 发布到Android的注意事项开发环境
- 快速启动栏消失的解决方案
- 学习Maven之Maven Surefire Plugin(JUnit篇)
- Retrofit网络请求参数注解,@Path、@Query、@QueryMap的使用
- 垂直滚动跑马灯AutoScrollTextView
- ReactJS与antdDesign中页面跳转问题(React Router)
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- 和基外汇黑平台大揭秘,看得懂的点个赞
- 基于CentOS 7配置Nginx负载均衡
- win7下安装配置tomcat,java运行环境
- 远程操作Linux 的软件
- request中各个地址的区别
- apache rewrite