您的位置:首页 > 移动开发 > Android开发

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

2016-08-14 22:54 411 查看
京东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;
}

}

效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: