Android自定义textview实现竖直滚动跑马灯效果
本文实例为大家分享了Android自定义textview实现跑马灯效果的具体代码,供大家参考,具体内容如下
xml布局
自定义MarqueeLayout
publicclassMarqueeLayoutextendsFrameLayoutimplementsViewTreeObserver.OnGlobalLayoutListener{ privateViewview1; privateViewview2; publicintinterval=2000; publicMarqueeLayout(Contextcontext){ this(context,null); } publicMarqueeLayout(Contextcontext,AttributeSetattrs){ this(context,attrs,0); } publicMarqueeLayout(Contextcontext,AttributeSetattrs,intdefStyleAttr){ super(context,attrs,defStyleAttr); getViewTreeObserver().addOnGlobalLayoutListener(this); } @Override protectedvoidonFinishInflate(){ super.onFinishInflate(); if(getChildCount()!=2){ thrownewIllegalArgumentException("MarqueeLayoutshouldhave2child!"); } view1=getChildAt(0); view2=getChildAt(1); } @Override publicvoidonGlobalLayout(){ getViewTreeObserver().removeGlobalOnLayoutListener(this); view2.setTranslationY(view2.getHeight()); } privateHandlerhandler=newHandler(){ @Override publicvoidhandleMessage(Messagemsg){ super.handleMessage(msg); startAnim(); } }; booleanisAniming=false; /** *开始滚动 */ publicvoidstart(){ getViewTreeObserver().addOnGlobalLayoutListener(newViewTreeObserver.OnGlobalLayoutListener(){ @Override publicvoidonGlobalLayout(){ getViewTreeObserver().removeGlobalOnLayoutListener(this); startAnim(); } }); } publicvoidstartAnim(){ if(isAniming)return; isAniming=true; inttargetY1=view1.getTranslationY()==0?-view1.getHeight():0; inttargetY2=view2.getTranslationY()==0?-view2.getHeight():0; ViewCompat.animate(view1) .translationY(targetY1) .setListener(newViewPropertyAnimatorListenerAdapter(){ @Override publicvoidonAnimationEnd(Viewview){ super.onAnimationEnd(view); //移动到下方 resetView(view); } }) .setDuration(400).start(); ViewCompat.animate(view2) .translationY(targetY2) .setListener(newViewPropertyAnimatorListenerAdapter(){ @Override publicvoidonAnimationEnd(Viewview){ super.onAnimationEnd(view); //移动到下方 resetView(view); isAniming=false; handler.sendEmptyMessageDelayed(0,interval); } }) .setDuration(400) .start(); } privatevoidresetView(Viewview){ if(view.getTranslationY()==-view.getHeight()){ view.setTranslationY(view.getHeight()*2); } } publicvoidstop(){ handler.removeCallbacksAndMessages(null); } }
在Activity中的使用
publicclassMainActivityextendsAppCompatActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MarqueeLayoutmarqueeLayout=(MarqueeLayout)findViewById(R.id.mar); TextViewtv1=(TextView)findViewById(R.id.tv1); TextViewtv2=(TextView)findViewById(R.id.tv2); marqueeLayout.start(); tv1.setVisibility(tv1.getTranslationY()==0?View.VISIBLE:View.GONE); tv2.setVisibility(tv2.getTranslationY()==0?View.VISIBLE:View.GONE); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。