1.新建类

import android.content.Context;import android.graphics.Color;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.util.Log;import android.view.Gravity;import android.view.View;import android.view.animation.AnimationUtils;import android.widget.TextSwitcher;import android.widget.TextView;import android.widget.ViewSwitcher;import androidx.annotation.NonNull;import java.util.List;import java.util.Timer;import java.util.TimerTask;public class LunBo1 extends TextSwitcher implements ViewSwitcher.ViewFactory {    private int index = -1;//轮播内容索引    private Context context;//上下文    private List<String> list;//轮播内容    public LunBo1(Context context, AttributeSet attrs) {        super(context, attrs);        this.context = context;        //设置轮播进出的动画        setInAnimation(AnimationUtils.loadAnimation(context, R.anim.in));//进        setOutAnimation(AnimationUtils.loadAnimation(context, R.anim.out));//出        //指定Factory 必不可少        this.setFactory(this);    }    /**     * 构造一个TextView     *     * @return TextView     */    @Override    public View makeView() {        TextView textView = new TextView(context);        textView.setTextColor(Color.parseColor("#000000"));        textView.setTextSize(20);        textView.setGravity(Gravity.CENTER_VERTICAL);        return textView;    }    /**     * 设置轮播内容     *     * @param list     */    public void setList(List<String> list) {        this.list = list;    }    /**     * 变更轮播显示内容     */    private void next() {        index++;        if (index == list.size()) {            index = 0;        }        Log.e("index", index + "");        setText(list.get(index));    }    //UI线程中调用next()    Handler mHandler = new Handler() {        @Override        public void handleMessage(@NonNull Message msg) {            super.handleMessage(msg);            if (msg.what == 666) {                next();            }        }    };    //循环通知Handler    TimerTask mTimerTask = new TimerTask() {        @Override        public void run() {            mHandler.sendEmptyMessage(666);        }    };    /**     * 设置轮播间隔,开始循环轮播     *     * @param time     */    public void setTime(long time) {        new Timer().scheduleAtFixedRate(mTimerTask, 0, time);    }    /**     * 获取当前轮播内容的索引     *     * @return     */    public int getIndex() {        return index;    }    /**     * 停止轮播,用于控制循环的子线程     */    public void stop() {        mTimerTask.cancel();    }}

2.xml动画资源文件

2.1 进入效果in.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="1000"        android:fromXDelta="-100%"        android:toXDelta="0%" />    <alpha        android:duration="1500"        android:fromAlpha="0"        android:toAlpha="1" />set>

2.2 离开效果out.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="1000"        android:fromXDelta="0%"        android:toXDelta="100%" />    <alpha        android:duration="800"        android:fromAlpha="1"        android:toAlpha="0" />set>

Activity中使用

private LunBo1 lunBo;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_refresh);initView();//轮播内容数据List<String> list = new ArrayList<>();list.add("这是文字轮播测试内容1");list.add("这是文字轮播测试内容2");list.add("这是文字轮播测试内容3");list.add("这是文字轮播测试内容4");//设置轮播内容数据,必须写在setTime之前lunBo.setList(list);//设置轮播间隔时间,开始轮播lunBo.setTime(4000);//轮播点击事件,获取当前轮播内容的索引lunBo.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//获取索引int index = lunBo.getIndex();Toast.makeText(RefreshActivity.this, "点击了"+index, Toast.LENGTH_SHORT).show();}});}/** * 为了线程安全,在onDestroy()生命周期中停止轮播 */@Overrideprotected void onDestroy() {super.onDestroy();//停止轮播lunBo.stop();}

更多相关文章

  1. Android(安卓)自定义dialog 设置宽度
  2. Android闹钟设置
  3. android中popupwindow的点滴
  4. android density
  5. Android加载html实现文件上传功能
  6. WindowManger
  7. android DatePicker和TimePicke用法
  8. android popupwindow
  9. Android统计表格MPAndroidChart解析

随机推荐

  1. Cocos2d-x Android 环境配置
  2. android JNI笔记
  3. Android Studio 3.6.1下载插件失败
  4. [Android]错误: -source 1.7 中不支持 la
  5. android 中怎样能够清除activity堆栈,也就
  6. 【Android】intent action 跳转到系统应
  7. Android漂亮好看的登陆,注册界面!(有可运行D
  8. android adb 关机实现方式
  9. js判断用户设备的类型(iOS,Android,pc等)
  10. Android(安卓)GPS 临近触发