垂直跑马灯

垂直跑马灯

//1.自定义View
public class UPMarqueeView extends ViewFlipper {

private Context mContext;
private boolean isSetAnimDuration = false;
private int interval = 2000;
/**
 * 动画时间
 */
private int animDuration = 500;

public UPMarqueeView(Context context) {
    super(context);
}

public UPMarqueeView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context, attrs, 0);
}

private void init(Context context, AttributeSet attrs, int defStyleAttr) {
    this.mContext = context;
    setFlipInterval(interval);
    Animation animIn = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_in);
    if (isSetAnimDuration) {
        animIn.setDuration(animDuration);
    }
    setInAnimation(animIn);
    Animation animOut = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_out);
    if (isSetAnimDuration) {
        animOut.setDuration(animDuration);
    }
    setOutAnimation(animOut);
}

/**
 * 设置循环滚动的View数组
 *
 * @param views
 */
public void setViews(List views) {
    if (views == null || views.size() == 0) {
        return;
    }
    removeAllViews();
    for (int i = 0; i < views.size(); i++) {
        addView(views.get(i));
    }
    startFlipping();
}

}

//2.布局
android:id="@+id/upview1"
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
app:layout_constraintBottom_toBottomOf=“parent”
app:layout_constraintLeft_toLeftOf=“parent”
app:layout_constraintRight_toRightOf=“parent”
app:layout_constraintTop_toTopOf=“parent” />

//3.activity界面
public class MainActivity extends AppCompatActivity {

private UPMarqueeView upview1;
List data = new ArrayList<>();
List views = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initParam();
    initdata();
    initView();
}

/**
 * 实例化控件
 */
private void initParam() {
    upview1 = (UPMarqueeView) findViewById(R.id.upview1);
}

private void initView() {
    setView();
    upview1.setViews(views);
}

/**
 * 初始化需要循环的View
 * 为了灵活的使用滚动的View,所以把滚动的内容让用户自定义
 * 假如滚动的是三条或者一条,或者是其他,只需要把对应的布局,和这个方法稍微改改就可以了,
 */
private void setView() {
    for (int i = 0; i < data.size(); i = i + 2) {
        //设置滚动的单个布局
        LinearLayout moreView = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.item_view, null);
        //初始化布局的控件
        TextView tv1 = (TextView) moreView.findViewById(R.id.tv1);
        TextView tv2 = (TextView) moreView.findViewById(R.id.tv2);
        //进行对控件赋值
        tv1.setText(data.get(i).toString());
        if (data.size() > i + 1) {
            //因为淘宝那儿是两条数据,但是当数据是奇数时就不需要赋值第二个,所以加了一个判断,还应该把第二个布局给隐藏掉
            tv2.setText(data.get(i + 1).toString());
        }else {
            moreView.findViewById(R.id.rl2).setVisibility(View.GONE);
        }

        //添加到循环滚动数组里面去
        views.add(moreView);
    }
}

/**
 * 初始化数据
 */
private void initdata() {
    data = new ArrayList<>();
    data.add("家人给2岁孩子喝这个,孩子智力倒退10岁!!!");
    data.add("iPhone8最感人变化成真,必须买买买买!!!!");
    data.add("简直是白菜价!日本玩家33万甩卖15万张游戏王卡");
    data.add("iPhone7价格曝光了!看完感觉我的腰子有点疼...");
    data.add("主人内疚逃命时没带够,回废墟狂挖30小时!");
    data.add("竟不是小米乐视!看水抢了骁龙821首发了!!!");
}

}

4.anim_marquee_in.xml

5.anim_marquee_out.xml

你可能感兴趣的:(垂直跑马灯)