android 仿京东抢购上下轮播消息
来源:互联网 发布:java 创建redis连接池 编辑:程序博客网 时间:2024/05/19 17:52
京东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; }}效果图:
1 0
- android 仿京东抢购上下轮播消息
- android 仿京东抢购上下轮播消息字幕垂直滚动
- 文字上下轮播
- 上下轮播控件TextSwitcher
- Android Studio TextView上下滚动轮播
- 网页简单的上下切换轮播
- Android:使用ViewFlipper实现上下滚动消息
- 上下滚动轮播
- 上下滚动轮播
- Android 获取手机中某一文件夹下的图片,并以banner的形式上下轮播
- js实现图片上下轮播效果(二)
- 上下滚动轮播条
- ViewFlipper上下翻滚轮播
- android 倒计时抢购实现
- Android轮播广告栏
- Android图片轮播
- Android 轮播
- Android 图片轮播
- HIVE入门,进阶
- Section 1.2 Transformations
- Fragment
- bnuoj 1059 实力排行
- Linux瑞士军刀:密码管理Keeweb
- android 仿京东抢购上下轮播消息
- 20160812腾讯TST面经
- xpath 绝对路径定位疑点分析
- java23种设计模式-----单例模式
- 【杭电oj2025】查找最大元素
- 网络面试题:TCP和UDP的9个区别是什么
- Dynamic 2D Imposters: A Simple, Efficient DirectX 9 Implementation
- WPS常见问题01——如何禁止自动生成序号如1. 2. 3. 4.
- Java基础--数组和链表的区别