之前本來是打算做TextView垂直向上滾動的,后來發(fā)現(xiàn)一位大神做得很好,https://github.com/sfsheng0322/MarqueeView 孫福生大神,然后自己要用到多個View向上滾動,也就是類似淘寶首頁頭條的那種滾動,所以就按照那個思路想了系啊,可以把View拿來滾動,這樣可以自己隨意的修改View里面的內(nèi)容,還比較簡單一些。所以這個整個思路就是把View就行循環(huán)滾動。
看一下循環(huán)滾動View的內(nèi)容咋寫的吧,非常簡單。
package com.dreamlive.upmarqueeview; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ViewFlipper; import java.util.List; /** * 仿淘寶首頁的 淘寶頭條滾動的自定義View * * Created by dreamlive on 2016/7/20. */ public class UPMarqueeView extends ViewFlipper { private Context mContext; private boolean isSetAnimDuration = false; private int interval = 2000; /** * 動畫時間 */ private int animDuration = 500; public UPMarqueeView(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs, 0); } private void init(Context context, AttributeSet attrs, int defStyleAttr) { this.mContext = context; setFlipInterval(interval); Animation animIn = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_in); if (isSetAnimDuration) animIn.setDuration(animDuration); setInAnimation(animIn); Animation animOut = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_out); if (isSetAnimDuration) animOut.setDuration(animDuration); setOutAnimation(animOut); } /** * 設(shè)置循環(huán)滾動的View數(shù)組 * * @param views */ public void setViews(List<View> views) { if (views == null || views.size() == 0) return; removeAllViews(); for (int i = 0; i < views.size(); i++) { addView(views.get(i)); } startFlipping(); } } MainActivity的內(nèi)容:
package com.dreamlive.upmarqueeviewdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import com.dreamlive.upmarqueeview.UPMarqueeView; import java.util.ArrayList; import java.util.List; /** * 仿淘寶首頁的 淘寶頭條滾動的自定義View * Created by dreamlive on 2016/7/20. */ public class MainActivity extends AppCompatActivity { private UPMarqueeView upview1; List<String> data = new ArrayList<>(); List<View> views = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initParam(); initdata(); initView(); } /** * 實例化控件 */ private void initParam() { upview1 = (UPMarqueeView) findViewById(R.id.upview1); } /** * 初始化界面程序 */ private void initView() { setView(); upview1.setViews(views); } /** * 初始化需要循環(huán)的View * 為了靈活的使用滾動的View,所以把滾動的內(nèi)容讓用戶自定義 * 假如滾動的是三條或者一條,或者是其他,只需要把對應(yīng)的布局,和這個方法稍微改改就可以了, */ private void setView() { for (int i = 0; i < data.size(); i = i + 2) { //設(shè)置滾動的單個布局 LinearLayout moreView = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.item_view, null); //初始化布局的控件 TextView tv1 = (TextView) moreView.findViewById(R.id.tv1); TextView tv2 = (TextView) moreView.findViewById(R.id.tv2); //進行對控件賦值 tv1.setText(data.get(i).toString()); if (data.size() > i + 1) { //因為淘寶那兒是兩條數(shù)據(jù),但是當數(shù)據(jù)是奇數(shù)時就不需要賦值第二個,所以加了一個判斷,還應(yīng)該把第二個布局給隱藏掉 tv2.setText(data.get(i + 1).toString()); }else { moreView.findViewById(R.id.rl2).setVisibility(View.GONE); } //添加到循環(huán)滾動數(shù)組里面去 views.add(moreView); } } /** * 初始化數(shù)據(jù) */ private void initdata() { data = new ArrayList<>(); data.add("家人給2歲孩子喝這個,孩子智力倒退10歲!!!"); data.add("iPhone8最感人變化成真,必須買買買買!!!!"); data.add("簡直是白菜價!日本玩家33萬甩賣15萬張游戲王卡"); data.add("iPhone7價格曝光了!看完感覺我的腰子有點疼..."); data.add("主人內(nèi)疚逃命時沒帶夠,回廢墟狂挖30小時!"); // data.add("竟不是小米樂視!看水搶了驍龍821首發(fā)了!!!"); } } github地址:https://github.com/dreamlivemeng/UpMarqueeTextView-master 歡迎star,fork,提pr,issues。
效果圖:


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。
新聞熱點
疑難解答
圖片精選