• 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 上下滚动的广告条 2016-11-14 11:07:09
    有些应用里面会有一些上下滚动文字的广告,尤其是关于商城里面的容易出现,具体的效果相比大家也见过,先看看效果吧 这是怎么实现的呢,有人说是用TextView实现,有的说这是跑马灯效果。其实说TextView实现这种...
  • Android 上下滚动字幕实现 2018-08-30 11:07:00
    首先values文件夹下添加或创建attrs文件,如下:   &lt;?xml version="...--//垂直滚动字幕--&gt; &lt;declare-styleable name="VerticalRollingTextView"&gt; &
  • build.gradle(projcet:...) allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } } build.gradle(Module:app) compile 'com.github.paradoxie:AutoVerticalTe
  • Android开发之上下轮播 2017-06-21 17:32:14
    Android开发中,商城类app的首页,经常会有公告信息上下轮播,今天主要讲的也是公告信息上下轮播,文字结尾会放上demo的下载链接。 先上效果图: 由于不是gif图,想要看效果的可以下载demo自己运行。 ...
  • android 消息垂直滚动轮播控件 类似淘宝首页的那种消息垂直滚动的控件,实现也很简单,网上也有很多例子,不过网上大多数的例子都是利用android的原生控件ViewFlipper,这个控件我也用了,最后发现很坑爹,有很多...
  • 本文介绍了一种通过代码控制ListView上下滚动的方法!
  • 产品的有个需求是 文字上下滚动,第一想到的是用属性动画实现,2个TextView 切换滚动,网上看了一堆资料大部分都是 TextSwitch,写博客不贴效果图真的是很惆怅,不知道具体效果如何,第一次进入切换是否有问题,还有...
  • 本文修改自GitHub上的工程:https://github.com/sfsheng0322/MarqueeView效果图:说明:基本大致与原作者的工程差不多,只是修改了下细节部分,比如原工程轮询广播时候文字过长会显示两行... android:id="@+id/mv_bar1
  • 类似于淘宝中的淘宝头条滚动效果
  • TextView 中当文字的内容超过限定的行数时会出现无法显示全被内容的情况,通过以下方式可实现TextView的上下滑动功能: 1.通过修改布局文件中TextView的属性: <TextView ... android:scrollbars="vertical" ....
  • To add the FocusResize library to your Android Studio project, simply add the following gradle dependency, with min sdk version of 19: compile 'com.borjabravo:focusresize:1.0.0' Usage To use the ...
  • 1.在activity中需要代码声明 textSwitcher = (TextSwitcher)findViewById(R.id.text_switcher); textSwitcher.setFactory(new ViewFactory() { @Override public View makeView() { TextView tv = ...
  • Android上下翻滚的公告 2019-04-19 10:20:45
    效果图: 添加工具类 ...import android.content.Context; import android.graphics.Color; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import and...
  • 今日,看到淘宝的一个效果,之前做的App中没做过,就实现...废话少说,呈上代码。 package com.panghu.view; import android.content.Context; import android.os.Handler; import android.os.Message; import an...
  • Android文字轮播控件 现在的绝大数APP特别是类似淘宝京东等这些大型APP都有文字轮播界面,实现循环轮播多个广告词等功能;这种控件俗称“跑马灯”,而TextBannerView已经实现了可垂直跑、可水平跑的跑马灯了。 效果...
  • 有些应用里面会有一些上下滚动文字的广告,尤其是关于商城里面的容易出现,具体的效果相比大家也见过,android TextSwicther上下滚动广告条 小喇叭
  • 1 效果图 啥也不多说,看效果图, 2 实现原理 A利用平移动画TranslateAnimation完成动画向上向下平移 ...代码中提供方法setCurText 设置当前的文字,无动画,upText显示上升动画,downText显示下降动画,更多的功能
  • 转载:... ...布局里面就是两个自定义的TextView,上面的左右滑动的是AutoHorizontalScrollTextView;...下面上下滚动的是AutoVerticalScrollTextView;
  • android实现左右上下滚动 2015-10-26 21:03:30
    本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-06/62567.htm view 或者 activity 实现 OnGestureListener 接口 在 onFling方法中实现左右滑动: ...
1 2 3 4 5 ... 20
收藏数 11,019
精华内容 4,407