Android实现垂直跑马灯效果
在我们开发过程中,跑马灯这个功能非常实用的,在实现这个功能的时候,这个时候我们通常需要找demo来实现这个方法,我从github上面找到这个demo感觉很好用,所以就要实现了这个功能喽MarqueeView,看这个工具类,因为我找这个类的时候是没有点击事件的,所以我给它加了一个点击事件,看这个工具类
publicclassMarqueeViewextendsViewFlipper{ privateContextmContext; privateListnotices; privatebooleanisSetAnimDuration=false; privateintcontentSize; privateintinterval=1000; privateintanimDuration=500; privateinttextSize=14; privateinttextColor=0xffffffff; privateintgravity=Gravity.LEFT|Gravity.CENTER_VERTICAL; //点击事件 privateOnItemClickListeneronItemClickListener; publicMarqueeView(Contextcontext,AttributeSetattrs){ super(context,attrs); init(context,attrs,0); } privatevoidinit(Contextcontext,AttributeSetattrs,intdefStyleAttr){ this.mContext=context; if(notices==null){ notices=newArrayList<>(); } TypedArraytypedArray=getContext().obtainStyledAttributes(attrs,R.styleable.MarqueeViewStyle,defStyleAttr,0); interval=typedArray.getInteger(R.styleable.MarqueeViewStyle_mvInterval,interval); isSetAnimDuration=typedArray.hasValue(R.styleable.MarqueeViewStyle_mvAnimDuration); animDuration=typedArray.getInteger(R.styleable.MarqueeViewStyle_mvAnimDuration,animDuration); if(typedArray.hasValue(R.styleable.MarqueeViewStyle_mvTextSize)){ textSize=(int)typedArray.getDimension(R.styleable.MarqueeViewStyle_mvTextSize,textSize); textSize=DisplayUtil.px2sp(mContext,textSize); } textColor=typedArray.getColor(R.styleable.MarqueeViewStyle_mvTextColor,textColor); typedArray.recycle(); setFlipInterval(interval); AnimationanimIn=AnimationUtils.loadAnimation(mContext,R.anim.anim_marquee_in); if(isSetAnimDuration)animIn.setDuration(animDuration); setInAnimation(animIn); AnimationanimOut=AnimationUtils.loadAnimation(mContext,R.anim.anim_marquee_out); if(isSetAnimDuration)animOut.setDuration(animDuration); setOutAnimation(animOut); } //根据公告字符串启动轮播 publicvoidstartWithText(finalStringnotice){ if(TextUtils.isEmpty(notice))return; getViewTreeObserver().addOnGlobalLayoutListener(newViewTreeObserver.OnGlobalLayoutListener(){ @Override publicvoidonGlobalLayout(){ getViewTreeObserver().removeGlobalOnLayoutListener(this); startWithFixedWidth(notice,getWidth()); } }); } //根据公告字符串列表启动轮播 publicvoidstartWithList(List notices){ setNotices(notices); start(); } //根据宽度和公告字符串启动轮播 privatevoidstartWithFixedWidth(Stringnotice,intwidth){ intnoticeLength=notice.length(); intdpW=DisplayUtil.px2dip(mContext,width); intlimit=dpW/textSize; if(dpW==0){ thrownewRuntimeException("PleasesetMarqueeViewwidth!"); } if(noticeLength<=limit){ notices.add(notice); }else{ intsize=noticeLength/limit+(noticeLength%limit!=0?1:0); for(inti=0;i =noticeLength?noticeLength:(i+1)*limit); notices.add(notice.substring(startIndex,endIndex)); } } start(); } //启动轮播 publicbooleanstart(){ if(notices==null||notices.size()==0)returnfalse; removeAllViews(); for(inti=0;i 1){ startFlipping(); } returntrue; } //创建ViewFlipper下的TextView privateTextViewcreateTextView(Stringtext,intposition){ TextViewtv=newTextView(mContext); tv.setGravity(gravity); tv.setText(text); tv.setTextColor(textColor); tv.setTextSize(textSize); tv.setTag(position); returntv; } publicList getNotices(){ returnnotices; } publicvoidsetNotices(List notices){ this.notices=notices; } publicvoidsetOnItemClickListener(OnItemClickListeneronItemClickListener){ this.onItemClickListener=onItemClickListener; } publicinterfaceOnItemClickListener{ voidonItemClick(intposition,TextViewtextView); } }
这就是它实现的方式,我从中加了点击事件,所以它的用法是这样的
verticalSwitchTextView1=(MarqueeView)rootView.findViewById(R.id.vertical_switch_textview1); Listinfo=newArrayList<>(); info.add("1.能够适应多行长文本的AndroidTextView的例子"); info.add("2.\"科比,!"); info.add("3.GitHub帐号:zhangyuanchong"); info.add("4.\"理解的也很简单,"); info.add("5.破解密钥"); info.add("6.实现了两种方式"); verticalSwitchTextView1.startWithList(info); verticalSwitchTextView1.setOnItemClickListener(newMarqueeView.OnItemClickListener(){ @Override publicvoidonItemClick(intposition,TextViewtextView){ position=position+1; Toast.makeText(getActivity(),"点击了"+position,Toast.LENGTH_SHORT).show(); } });
这样就直接实现喽,其实还是蛮简单的呢。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。