android 仿京东抢购上下轮播消息

京东app有个上下轮播消息,就是textview轮播显示商品名称,这个是在github上看到别人写的,地址:https://github.com/LeeYawei/Android-TipView 感谢作者,在这把代码贴下:

布局文件:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:background="#F9CDAD"  android:paddingBottom="@dimen/activity_vertical_margin"  android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin"  >  <com.example.looptextview.LooperTextView  android:id="@+id/looperview"  android:layout_width="match_parent"  android:layout_height="60px"  android:layout_marginTop="10px"  android:background="#00ffff"  android:padding="10dp"  /> </RelativeLayout>

自定义view实现上下轮播的view

package com.example.looptextview; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.view.animation.TranslateAnimation; import android.widget.FrameLayout; import android.widget.TextView; import java.util.List; import java.util.Random; /**  * Created by Adminis on 2016/8/14.  */ public class LooperTextView extends FrameLayout{
    private List<String> tipList;  private int curTipIndex = 0;  private long lastTimeMillis ;  private static final int ANIM_DELAYED_MILLIONS = 3 * 1000;  /** 动画持续时长 */  private static final int ANIM_DURATION = 1* 1000;  private static final String DEFAULT_TEXT_COLOR = "#2F4F4F";  private static final int DEFAULT_TEXT_SIZE = 16;  private Drawable head_boy,head_girl;  private TextView tv_tip_out,tv_tip_in;  private static final String TIP_PREFIX = "是我老婆 ";  private Animation anim_out, anim_in;  public LooperTextView(Context context) {
        super(context);  initTipFrame();  initAnimation();  }

    public LooperTextView(Context context, AttributeSet attrs) {
        super(context, attrs);  initTipFrame();  initAnimation();  }

    public LooperTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);  initTipFrame();  initAnimation();  }
    private void initTipFrame() {
        head_boy = loadDrawable(R.mipmap.user_head_boy);  head_girl = loadDrawable(R.mipmap.user_head_girl);  tv_tip_out = newTextView();  tv_tip_in = newTextView();  addView(tv_tip_in);  addView(tv_tip_out);  }
    private TextView newTextView(){
        TextView textView = new TextView(getContext());  LayoutParams lp = new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, Gravity.CENTER_VERTICAL);  textView.setLayoutParams(lp);  textView.setCompoundDrawablePadding(10);  textView.setGravity(Gravity.CENTER_VERTICAL);  textView.setLines(2);  textView.setEllipsize(TextUtils.TruncateAt.END);  textView.setTextColor(Color.parseColor(DEFAULT_TEXT_COLOR));  textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_TEXT_SIZE);  return textView;  }
    /**  * 将资源图片转换为Drawable对象  * @param ResId  * @return  */  private Drawable loadDrawable(int ResId) {
        Drawable drawable = getResources().getDrawable(ResId);  drawable.setBounds(0, 0, drawable.getMinimumWidth() - 10, drawable.getMinimumHeight() - 10);  return drawable;  }
    private void initAnimation() {
        anim_out = newAnimation(0, -1);  anim_in = newAnimation(1, 0);  anim_in.setAnimationListener(new Animation.AnimationListener() {

            @Override  public void onAnimationStart(Animation animation) {

            }

            @Override  public void onAnimationRepeat(Animation animation) {

            }

            @Override  public void onAnimationEnd(Animation animation) {
                updateTipAndPlayAnimationWithCheck();  }
        });  }
    private Animation newAnimation(float fromYValue, float toYValue) {
        Animation anim = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,  Animation.RELATIVE_TO_SELF,fromYValue,Animation.RELATIVE_TO_SELF, toYValue);  anim.setDuration(ANIM_DURATION);  anim.setStartOffset(ANIM_DELAYED_MILLIONS);  anim.setInterpolator(new DecelerateInterpolator());  return anim;  }
    private void updateTipAndPlayAnimationWithCheck() {
        if (System.currentTimeMillis() - lastTimeMillis < 1000 ) {
            return ;  }
        lastTimeMillis = System.currentTimeMillis();  updateTipAndPlayAnimation();  }
    private void updateTipAndPlayAnimation() {
        if (curTipIndex % 2 == 0) {
            updateTip(tv_tip_out);  tv_tip_in.startAnimation(anim_out);  tv_tip_out.startAnimation(anim_in);  this.bringChildToFront(tv_tip_in);  } else {
            updateTip(tv_tip_in);  tv_tip_out.startAnimation(anim_out);  tv_tip_in.startAnimation(anim_in);  this.bringChildToFront(tv_tip_out);  }
    }
    private void updateTip(TextView tipView) {
        if (new Random().nextBoolean()) {
            tipView.setCompoundDrawables(head_boy, null, null, null);  } else {
            tipView.setCompoundDrawables(head_girl, null, null, null);  }
        String tip = getNextTip();  if(!TextUtils.isEmpty(tip)) {
            tipView.setText(tip+TIP_PREFIX);  }
    }
    /**  * 获取下一条消息  * @return  */  private String getNextTip() {
        if (isListEmpty(tipList)) return null;  return tipList.get(curTipIndex++ % tipList.size());  }
    public static boolean isListEmpty(List list) {
        return list == null || list.isEmpty();  }
    public void setTipList(List<String> tipList) {
        this.tipList = tipList;  curTipIndex = 0;  updateTip(tv_tip_out);  updateTipAndPlayAnimation();  }
}

package com.example.looptextview; import android.app.Activity; import android.os.Bundle; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity {
    private static final String TAG ="MainActivity" ;  private LooperTextView looperview;  @Override  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  looperview = (LooperTextView) findViewById(R.id.looperview);  looperview.setTipList(generateTips());  }
    private List<String> generateTips() {
        List<String> tips = new ArrayList<>();  tips.add("赵丽颖");  tips.add("杨颖");  tips.add("郑爽");  tips.add("杨幂");  tips.add("刘诗诗");  tips.add("迪丽热巴");  tips.add("李沁");  tips.add("唐嫣");  tips.add("林心如");  tips.add("陈乔恩");  tips.add("范冰冰");  tips.add("刘亦菲");  tips.add("李小璐");  tips.add("佟丽娅");  return tips;  }

}

效果图:

《android 仿京东抢购上下轮播消息》

    原文作者:Android
    原文地址: https://juejin.im/entry/58ec7de644d90400576c3cc9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞