自定义垂直跑马灯LinearLayout

来源:互联网 发布:淘宝会员等级会降低吗 编辑:程序博客网 时间:2024/05/16 06:35

查看了很多网上的案例,还是用自定义的LinearLayout,加载动画来实现。


public class VerticalLampLayout extends LinearLayout implements OnClickListener {private boolean isOne = true;// 两次滑动的标志位private static final long DURATION = 3000;// 时间间隔private MyHandler mHandler;private List<String> mDataList;private Context mContext;private TextView mText_1;private TextView mText_2;private Animation mSlide_In;private Animation mSlide_Out;private int item = 0;// 标志位/** * 构造函数 */public VerticalLampLayout(Context context, AttributeSet attrs) {super(context, attrs);init();}private void init() {mHandler = new MyHandler();mContext = getContext();View layout = LayoutInflater.from(mContext).inflate(R.layout.vertical_lamp_layout, this);mText_1 = (TextView) layout.findViewById(R.id.lamp_text_1);mText_2 = (TextView) layout.findViewById(R.id.lamp_text_2);mText_1.setOnClickListener(this);mText_2.setOnClickListener(this);mSlide_In = AnimationUtils.loadAnimation(mContext, R.anim.slide_in);mSlide_Out = AnimationUtils.loadAnimation(mContext, R.anim.slide_out);}/** * 对外,设置文本数据 */public void setData(List<String> list) {this.mDataList = list;// 非空判断if (mDataList == null || mDataList.size() < 2) {mDataList = new ArrayList<String>();mDataList.add("通知一");mDataList.add("通知二");}mText_1.setText(mDataList.get(0));mText_2.setText(mDataList.get(1));}/** * 对外,执行启动 */public void startRun() {mHandler.postDelayed(mHandler, DURATION);}/** * 业务执行的handler */class MyHandler extends Handler implements Runnable {@Overridepublic void run() {if (isOne) {startOne();} else {startTwo();}mHandler.postDelayed(this, DURATION);// 重复执行}}/** 第一步的动画 */private void startOne() {mText_1.startAnimation(mSlide_Out);mText_1.setVisibility(View.INVISIBLE);if ((++item) == mDataList.size()) {item = 0;}mText_2.setText(mDataList.get(item));mText_2.setVisibility(View.VISIBLE);mText_2.startAnimation(mSlide_In);isOne = false;}/** 第二步的动画 */private void startTwo() {mText_2.startAnimation(mSlide_Out);mText_2.setVisibility(View.INVISIBLE);if ((++item) == mDataList.size()) {item = 0;}mText_1.setText(mDataList.get(item));mText_1.setVisibility(View.VISIBLE);mText_1.startAnimation(mSlide_In);isOne = true;}@Overridepublic void onClick(View view) {Toast.makeText(mContext, mDataList.get(item), Toast.LENGTH_SHORT).show();}

还有两个简单的xml动画

slide_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >    <translate        android:duration="2000"        android:fillAfter="true"        android:fromXDelta="0%"        android:fromYDelta="-100%"        android:toXDelta="0%"        android:toYDelta="0%" /></set>

slide_out.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >    <translate        android:duration="2000"        android:fillAfter="true"        android:fromXDelta="0%"        android:fromYDelta="0%"        android:toXDelta="0%"        android:toYDelta="100%" /></set>

附上一个代码


0 0
原创粉丝点击