android 仿京东抢购上下轮播消息
2016-08-14 22:54
411 查看
京东app有个上下轮播消息,就是textview轮播显示商品名称,这个是在github上看到别人写的,地址:https://github.com/LeeYawei/Android-TipView 感谢作者,在这把代码贴下:
布局文件:
自定义view实现上下轮播的view
效果图:
布局文件:
<?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 头部设置上下滚动的消息列表 TextView (TextSwitcher运用)
- Android仿京东首页轮播文字(又名垂直跑马灯)
- Android-->自定义无限循环轮播图控件(仿京东、天猫等)
- Android使用ViewFlipper实现上下滚动消息
- Android仿京东首页轮播文字效果
- Android自定义布局仿京东详情页,上下翻页
- Android仿京东淘宝自动无限循环轮播控件思路详解
- Android:使用ViewFlipper实现上下滚动消息
- 模仿东京首页banner轮播,京东新闻上下滚动动画实现(动画实现)
- Android高仿京东淘宝自动无限循环轮播控件的实现思路和过程
- 模仿东京首页banner轮播,京东新闻上下滚动动画实现(动画实现)
- Android 获取手机中某一文件夹下的图片,并以banner的形式上下轮播
- 【Android】App首页上下滚动快报控件 通知控件 类似京东快报控件(二)
- Android开发之上下轮播
- 【Android】首页图片轮播效果(淘宝、京东首页广告效果)
- 【Android】App首页上下滚动快报控件 通知控件 类似京东快报控件(一)
- Android Studio TextView上下滚动轮播
- Android消息播报向上滚动轮播的实现
- Android 小項目之--消息、線程、動畫顯示圖片(附源碼)