在大佬MarqueeViewLibrary框架的基礎(chǔ)上實(shí)現(xiàn)控件的各項(xiàng)參數(shù)動態(tài)配置;
原文地址:
https://gitcode.net/mirrors/gongwen/MarqueeViewLibrary
實(shí)現(xiàn)后效果圖:
配置參數(shù) 動態(tài)替換下面的值即可
Boolean isPlayAnim = true;//是否滾動
int width = 600;//控件寬度dp
int heigh = 80;//控件高度dp
int margin_left = 5;//左邊距 dp
int margin_right = 0;//右邊距 dp
int margin_top = 5;//上邊距 dp
int margin_bottom = 0;//下邊距 dp
String backgroundColor = "#cccccc";//控件背景色
int fontSize = 14;//字體大小dp
String textColor = "#000000";//字體顏色
int scrollSpeed = 4000;//翻頁速度 毫秒
int scrollDirection = 4;//滾動方向:1上2下3左4右 其他默認(rèn)左;
int animSpeed = 2000;//動畫持續(xù)時間 毫秒
boolean isSingleLine = true;//是否單行
int textAlineType = 1;//文字居中方式:1居中,2橫向居中3縱向居中 默認(rèn)1
//設(shè)置數(shù)據(jù)源
final List<String> datas = Arrays.asList("《賦得古原草送別》", "離離原上草磅废,一歲一枯榮免都。", "野火燒不盡,春風(fēng)吹又生贮泞。", "遠(yuǎn)芳侵古道资昧,晴翠接荒城酬土。",
"又送王孫去,萋萋滿別情格带。", "文字顯示不下時撤缴,系統(tǒng)的處理方式(可選:none,start叽唱,middle屈呕,end)");
配置控制
//本地父布局
RelativeLayout rl_main_layout = findViewById(R.id.rl_main_layout);
int widthPx = MyUtils.px2dip(this, width);
int heighPx = MyUtils.px2dip(this, heigh);
SimpleMarqueeView marqueeView = new SimpleMarqueeView(this);
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) rl_main_layout.getLayoutParams();
layoutParams.width = widthPx;
layoutParams.height = heighPx;
layoutParams.setMargins(MyUtils.dip2px(this, margin_left), MyUtils.dip2px(this, margin_top),
MyUtils.dip2px(this, margin_right), MyUtils.dip2px(this, margin_bottom));
marqueeView.setLayoutParams(layoutParams);//設(shè)置寬高及margin
rl_main_layout.setBackgroundColor(Color.parseColor(backgroundColor));//設(shè)置背景色
rl_main_layout.addView(marqueeView);
/**
* 設(shè)置動畫
* SimpleMarqueeView marqueeView SimpleMarqueeView控件
* int scrollDirection 滾動方向
* int animSpeed 動畫持續(xù)時間
* int width控件寬度
* */
setAnimation(marqueeView, scrollDirection, animSpeed, widthPx, heighPx);
marqueeView.setFlipInterval(scrollSpeed);//翻頁時間間隔
marqueeView.setTextColor(Color.parseColor(textColor));//字體顏色
marqueeView.setTextSize(MyUtils.dip2px(this, fontSize));
marqueeView.setTextEllipsize(TextUtils.TruncateAt.END);//文字顯示不下時,系統(tǒng)的處理方式
switch (textAlineType) {//1居中,2橫向居中3縱向居中 默認(rèn)1
case 1:
marqueeView.setTextGravity(Gravity.CENTER);
break;
case 2:
marqueeView.setTextGravity(Gravity.CENTER_HORIZONTAL);
break;
case 3:
marqueeView.setTextGravity(Gravity.CENTER_VERTICAL);
break;
default:
marqueeView.setTextGravity(Gravity.CENTER);
break;
}
marqueeView.setTextSingleLine(isSingleLine);//是否單行
SimpleMF<String> marqueeFactory = new SimpleMF(this);
marqueeFactory.setData(datas);
marqueeView.setMarqueeFactory(marqueeFactory);
if (isPlayAnim && datas != null || datas.size() > 0) {
marqueeView.startFlipping();
} else {
marqueeView.stopFlipping();
}
動畫配置
private void setAnimation(SimpleMarqueeView marqueeView, int scrollDirection, int animSpeed, int width, int heigh) {
switch (scrollDirection) {
case 1://上
setBottomToTop(marqueeView, animSpeed, heigh);
break;
case 2://下
setTopToBottom(marqueeView, animSpeed, heigh);
break;
case 3://左
setRightToLeftAnim(marqueeView, animSpeed, width);
break;
case 4://右
setLeftToRoght(marqueeView, animSpeed, width);
break;
default://左
setRightToLeftAnim(marqueeView, animSpeed, width);
break;
}
}
//從下到上
private void setBottomToTop(SimpleMarqueeView marqueeView, int animSpeed, int heigth) {
AlphaAnimation alphaAnim = new AlphaAnimation(0f, 1f);
TranslateAnimation translateAnim = new TranslateAnimation(0, 0f, heigth, 0);
AnimationSet in_bottom = new AnimationSet(true);
in_bottom.addAnimation(alphaAnim);
in_bottom.addAnimation(translateAnim);
in_bottom.setDuration(animSpeed);
AlphaAnimation alphaAnim1 = new AlphaAnimation(1, 0f);
TranslateAnimation translateAnim1 = new TranslateAnimation(0f, 0, 0, -heigth);
AnimationSet out_top = new AnimationSet(true);
out_top.addAnimation(alphaAnim1);
out_top.addAnimation(translateAnim1);
out_top.setDuration(animSpeed);
marqueeView.setInAndOutAnim(in_bottom, out_top);
}
//從上到下
private void setTopToBottom(SimpleMarqueeView marqueeView, int animSpeed, int heigth) {
AlphaAnimation alphaAnim = new AlphaAnimation(0f, 1f);
TranslateAnimation translateAnim = new TranslateAnimation(0, 0f, -heigth, 0);
AnimationSet in_bottom = new AnimationSet(true);
in_bottom.addAnimation(alphaAnim);
in_bottom.addAnimation(translateAnim);
in_bottom.setDuration(animSpeed);
AlphaAnimation alphaAnim1 = new AlphaAnimation(1, 0f);
TranslateAnimation translateAnim1 = new TranslateAnimation(0f, 0, 0,heigth);
AnimationSet out_top = new AnimationSet(true);
out_top.addAnimation(alphaAnim1);
out_top.addAnimation(translateAnim1);
out_top.setDuration(animSpeed);
marqueeView.setInAndOutAnim(in_bottom, out_top);
}
//從右到左
private void setRightToLeftAnim(SimpleMarqueeView marqueeView, int animSpeed, int width) {
TranslateAnimation translateAnim = new TranslateAnimation(width, 0f, 0, 0);
AnimationSet in_right = new AnimationSet(true);
in_right.addAnimation(translateAnim);
in_right.setDuration(animSpeed);
TranslateAnimation translateAnim1 = new TranslateAnimation(0f, -width, 0, 0);
AnimationSet out_left = new AnimationSet(true);
out_left.setDuration(animSpeed);
out_left.addAnimation(translateAnim1);
marqueeView.setInAndOutAnim(in_right, out_left);
}
//從左到右
private void setLeftToRoght(SimpleMarqueeView marqueeView, int animSpeed, int width) {
TranslateAnimation translateAnim = new TranslateAnimation(-width, 0, 0, 0);
AnimationSet in_right = new AnimationSet(true);
in_right.addAnimation(translateAnim);
in_right.setDuration(animSpeed);
TranslateAnimation translateAnim1 = new TranslateAnimation(0, width, 0, 0);
AnimationSet out_left = new AnimationSet(true);
out_left.setDuration(animSpeed);
out_left.addAnimation(translateAnim1);
marqueeView.setInAndOutAnim(in_right, out_left);
}