国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現文字垂直滾動、縱向走馬燈效果的實現方式匯總

2019-10-22 18:18:42
字體:
來源:轉載
供稿:網友

android,文字,垂直,滾動,走馬燈

方法一、使用系統控件ViewFlipper方式:

布局文件:

<ViewFlipper    android:id="@+id/view_flipper"    android:layout_width="300dp"    android:layout_height="35dp"    android:layout_centerInParent="true"    android:autoStart="true"    android:background="@drawable/warning_bg"    android:flipInterval="3000"    android:inAnimation="@anim/slide_in_bottom"    android:outAnimation="@anim/slide_out_top">    <TextView      android:id="@+id/tv_warning_content1"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:ellipsize="middle"      android:gravity="center"      android:singleLine="true"      android:text="有預警信息有預警信息有預警信息"      android:textColor="#000000"      android:textSize="16sp"/>    <TextView      android:id="@+id/tv_warning_content2"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:ellipsize="middle"      android:gravity="center"      android:singleLine="true"      android:text="當前天氣狀況當前天氣狀況當前"      android:textColor="#000000"      android:textSize="16sp"/>    <TextView      android:id="@+id/tv_warning_content3"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:ellipsize="middle"      android:gravity="center"      android:singleLine="true"      android:text="123456465"      android:textColor="#000000"      android:textSize="16sp"/>  </ViewFlipper>

背景文件:warning_bg.xml

<?xml version="1.0" encoding="utf-8"?>  <shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">  <solid android:color="#34000000"/>  <corners android:radius="80dp"/></shape>

切入動畫:slide_in_bottom.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">  <translate    android:duration="1000"    android:fromYDelta="100%p"    android:toYDelta="0" /></set>

切出動畫:slide_out_top.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">  <translate    android:duration="1000"    android:fromYDelta="0"    android:toYDelta="-100%p" /></set>

注意:如果不在布局文件里設置: android:autoStart="true", 可以在代碼中動態設置開始循環mViewFlipper.startFlipping();

在Activity中顯示正常,但在fragment中可能會有重影的現象。

方法二、使用三方框架

Gradle:

compile 'com.sunfusheng:marqueeview:1.3.3'

屬性

android,文字,垂直,滾動,走馬燈

XML

<com.sunfusheng.marqueeview.MarqueeView  android:id="@+id/marqueeView"  android:layout_width="match_parent"  android:layout_height="30dp"  app:mvAnimDuration="1000"  app:mvDirection="bottom_to_top"  app:mvInterval="3000"  app:mvTextColor="@color/white"  app:mvTextSize="14sp"  app:mvSingleLine="true"/>

設置字符串列表數據

MarqueeView marqueeView = (MarqueeView) findViewById(R.id.marqueeView);List<String> info = new ArrayList<>();info.add("11111111111111");info.add("22222222222222");info.add("33333333333333");info.add("44444444444444");info.add("55555555555555");info.add("66666666666666");marqueeView.startWithList(info);// 在代碼里設置自己的動畫marqueeView.startWithList(info, R.anim.anim_bottom_in, R.anim.anim_top_out);

設置字符串數據

String notice = "心中有陽光,腳底有力量!心中有陽光,腳底有力量!心中有陽光,腳底有力量!";marqueeView.startWithText(notice);// 在代碼里設置自己的動畫marqueeView.startWithText(notice, R.anim.anim_bottom_in, R.anim.anim_top_out);

設置事件監聽

marqueeView.setOnItemClickListener(new MarqueeView.OnItemClickListener() {  @Override  public void onItemClick(int position, TextView textView) {    Toast.makeText(getApplicationContext(), String.valueOf(marqueeView1.getPosition()) + ". " + textView.getText(), Toast.LENGTH_SHORT).show();  }});

重影問題可參考以下解決方案

@Overridepublic void onStart() {  super.onStart();   marqueeView.startFlipping();}@Overridepublic void onStop() {  super.onStop();  marqueeView.stopFlipping();}

注意:這個庫主要還是繼承了ViewFlipper,類似的庫還有MarqueeViewLibrary,實現方法基本類似,在Activity中顯示正常,但在fragment中可能會有重影的現象。

方法三、使用系統控件TextSwitcher實現

布局文件

<TextSwitcher      android:id="@+id/text_switcher"      android:layout_width="285dp"      android:layout_height="35dp"      android:background="@drawable/warning_bg"/>

背景文件:warning_bg.xml

<?xml version="1.0" encoding="utf-8"?>  <shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">  <solid android:color="#34000000"/>  <corners android:radius="80dp"/></shape>

代碼:

private int index = 0;//textview上下滾動下標  private Handler handler = new Handler();  private boolean isFlipping = false; // 是否啟用預警信息輪播  private List<String> mWarningTextList = new ArrayList<>();  private void setTextSwitcher() {    mTextSwitcher.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.slide_in_bottom));    mTextSwitcher.setOutAnimation(AnimationUtils.loadAnimation(mContext, R.anim.slide_out_top));    mTextSwitcher.setFactory(new ViewSwitcher.ViewFactory() {      @Override      public View makeView() {        TextView textView = new TextView(mContext);        textView.setSingleLine();        textView.setTextSize(12);//字號        textView.setTextColor(Color.parseColor("#ffffff"));        textView.setEllipsize(TextUtils.TruncateAt.MIDDLE);        textView.setSingleLine();        textView.setGravity(Gravity.CENTER);        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(            ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);        params.gravity = Gravity.CENTER;        textView.setLayoutParams(params);        textView.setPadding(25, 0, 25, 0);        return textView;      }    });  }    private Runnable runnable = new Runnable() {    @Override    public void run() {      if (!isFlipping) {        return;      }      index++;      mTextSwitcher.setText(mWarningTextList.get(index % mWarningTextList.size()));      if (index == mWarningTextList.size()) {        index = 0;      }      startFlipping();    }  };  //開啟信息輪播  public void startFlipping() {    if (mWarningTextList.size() > 1) {      handler.removeCallbacks(runnable);      isFlipping = true;      handler.postDelayed(runnable, 3000);    }  }  //關閉信息輪播  public void stopFlipping() {    if (mWarningTextList.size() > 1) {      isFlipping = false;      handler.removeCallbacks(runnable);    }  }  //設置數據  private void setData() {    if (mWarningTextList.size() == 1) {      mTextSwitcher.setText(mWarningTextList.get(0));      index = 0;    }    if (mWarningTextList.size() > 1) {      handler.postDelayed(new Runnable() {        @Override        public void run() {          mTextSwitcher.setText(mWarningTextList.get(0));          index = 0;        }      }, 1000);      mTextSwitcher.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.slide_in_bottom));      mTextSwitcher.setOutAnimation(AnimationUtils.loadAnimation(mContext, R.anim.slide_out_top));      startFlipping();    }  }    @Override  public void onResume() {    super.onResume();    startFlipping();  }  @Override  public void onStop() {    super.onStop();    stopFlipping();  }

切入動畫:slide_in_bottom.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">  <translate    android:duration="1000"    android:fromYDelta="100%p"    android:toYDelta="0" /></set>

切出動畫:slide_out_top.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">  <translate    android:duration="1000"    android:fromYDelta="0"    android:toYDelta="-100%p" /></set>

注意:這種方法在Activity和Fragment中均使用正常,可以解決Android文字垂直滾動、縱向走馬燈在Fragment中重疊的現象。

總結

以上所述是小編給大家介紹的Android實現文字垂直滾動、縱向走馬燈效果的實現方式匯總,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北宁市| 托克逊县| 哈巴河县| 桃园市| 毕节市| 江都市| 宁海县| 太保市| 贺州市| 贵德县| 南雄市| 读书| 屏边| 恩施市| 凌云县| 东莞市| 胶州市| 河西区| 平塘县| 巴南区| 密云县| 连山| 西藏| 平罗县| 本溪| 临漳县| 镇巴县| 屏东县| 文山县| 东乡| 津市市| 叶城县| 项城市| 五华县| 贵港市| 时尚| 额济纳旗| 绍兴县| 廊坊市| 桑植县| 宜宾县|