最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 實現(xiàn)通知消息水平播放、無限循環(huán)效果

 更新時間:2017年08月20日 17:13:37   作者:A448955639  
Android 實現(xiàn)通知消息水平播放、無限循環(huán)效果非常常見,今天小編給大家分享實例代碼感興趣的朋友參考下吧

今天我們來實現(xiàn)一個簡單的效果,通知消息無限循環(huán)播放,先看效果圖:

這里寫圖片描述

這個效果也很常見,實現(xiàn)的方法也有很多,我是使用RecyclerView來實現(xiàn)的,覺得還是挺不錯的,就寫下來分享給大家。

下面先看我們的布局文件main.xml,里面主要是一個RecyclerView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 >
 <android.support.v7.widget.RecyclerView
  android:id="@+id/myRecyclerView"
  android:layout_width="match_parent"
  android:layout_height="36dp"
  android:layout_marginTop="20dp"
  android:background="#faf7bb"
  >
 </android.support.v7.widget.RecyclerView>
</LinearLayout>

接下來看一下MainActivity的代碼:

public class MainActivity extends Activity {
 @BindView(R.id.myRecyclerView)RecyclerView myRecyclerView;
 private List<String> mDatas;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  ButterKnife.bind(this);
  initData();
  initView();
 }
 private void initData(){
  mDatas = new ArrayList<>();
  mDatas.add("我被青春撞了一下腰");
  mDatas.add("愛就一個字,我只說一次");
  mDatas.add("你在他鄉(xiāng)還好嗎");
 }
 private void initView(){
  LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
  myRecyclerView.setLayoutManager(linearLayoutManager);
  myRecyclerView.setAdapter(new MyAdapter());
  handler.sendEmptyMessageDelayed(0x00,1000);
 }
 private Handler handler = new Handler(){
  @Override
  public void handleMessage(Message msg) {
   myRecyclerView.scrollBy(myRecyclerView.getScrollX()+2,myRecyclerView.getScrollY());
   handler.sendEmptyMessageDelayed(0x00,100);
  }
};
}

再看一下Adapter:

class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
  @Override
  public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   return new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recyclerview,parent,false));
  }
  @Override
  public void onBindViewHolder(MyViewHolder holder, final int position) {
   final int tempPos = position%(mDatas.size());
   holder.textView.setText(mDatas.get(tempPos));
   holder.textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     Toast toast = Toast.makeText(MainActivity.this,mDatas.get(tempPos),Toast.LENGTH_SHORT);
     toast.setGravity(Gravity.CENTER,0,0);
     toast.show();
    }
   });
  }
  @Override
  public int getItemCount() {
   return 100000;
  }
 }
 class MyViewHolder extends RecyclerView.ViewHolder{
  private TextView textView;
  public MyViewHolder(View itemView) {
   super(itemView);
   textView = (TextView) itemView.findViewById(R.id.tv_recyclerview);
  }
}

首先,創(chuàng)建一個List,存放播放的數(shù)據(jù),然后設(shè)置RecyclerView,

我們看一下MyAdapter,在getItemCount()方法里,我們返回的次數(shù)是100000,目的就是為了讓數(shù)據(jù)大一點,看似達(dá)到了無限播放的效果,畢竟用戶在一個界面的停留時間是有限的,這個根據(jù)具體業(yè)務(wù)場景,還可以適當(dāng)調(diào)整。在看一下MainActivity的initView方法,設(shè)置好了RecyclerView之后,使用handler發(fā)送一個空消息,到達(dá)handler的handleMessage方法,這個方法的處理,就是我們的核心了,
myRecyclerView.scrollBy(myRecyclerView.getScrollX()+2,myRecyclerView.getScrollY());

使用scroolBy,每隔100毫秒發(fā)送一次消息,每次scrollX增加2個像素位移,即可達(dá)到無限循環(huán)滾動的效果,好神奇。到此我們的功能就實現(xiàn)了。

下面做兩個優(yōu)化:

1.第一個優(yōu)化,

當(dāng)頁面有跳轉(zhuǎn)時,禁止消息滾動,即暫停,當(dāng)頁面回來的時候再接著滾動。
我們定義一個boolean類型的變量,在onStop和onRestart方法里分別賦值,

private boolean flag;
 @Override
 protected void onRestart() {
  flag = false;
  handler.sendEmptyMessageDelayed(0x00,100);
  super.onRestart();
 }
 @Override
 protected void onStop() {
  flag = true;
  super.onStop();
 }

接著,handler的handlerMessage方法稍微也改一下:

 @Override
  public void handleMessage(Message msg) {
   myRecyclerView.scrollBy(myRecyclerView.getScrollX() + 2, myRecyclerView.getScrollY());
   if (!flag) {
    handler.sendEmptyMessageDelayed(0x00, 100);
   }
  }

這樣,在頁面進(jìn)行切換時,消息不再滾動了。

2.第二個優(yōu)化,

禁止手動滾動消息,最上面那個效果圖,可以看出,我們可以用手滾動消息,如果不想讓用戶用手滾動,則禁止響應(yīng)move事件即可,由我們的布局文件可知,RecyclerView的父布局是LinearLayout,我們可以自定義LinearLayout,攔截掉move事件即可,代碼如下:

public class ForbidMoveLinearLayout extends LinearLayout {
 public ForbidMoveLinearLayout(Context context) {
  super(context);
 }
 public ForbidMoveLinearLayout(Context context, AttributeSet attrs) {
  super(context, attrs);
 }
 public ForbidMoveLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }
 @Override
 public boolean onInterceptTouchEvent(MotionEvent ev) {
  if (ev.getAction() == MotionEvent.ACTION_MOVE){
   return true;
  }
  return super.onInterceptTouchEvent(ev);
 }
}

我們的布局文件進(jìn)行相應(yīng)調(diào)整:

<?xml version="1.0" encoding="utf-8"?>
<com.example.administrator.helloapplication.ForbidMoveLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 >
 <android.support.v7.widget.RecyclerView
  android:id="@+id/myRecyclerView"
  android:layout_width="match_parent"
  android:layout_height="36dp"
  android:layout_marginTop="20dp"
  android:background="#faf7bb"
  >
 </android.support.v7.widget.RecyclerView>
</com.example.administrator.helloapplication.ForbidMoveLinearLayout>

這樣就禁止手動滑動了,效果圖就不貼了,可以自己試一下??雌饋硪膊皇悄敲措y,但是如果想不到這個思路,就不好下手了。

Ok,到此結(jié)束。

總結(jié)

以上所述是小編給大家介紹的Android 實現(xiàn)通知消息水平播放、無限循環(huán)效果,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • Android中二維碼的掃描和生成(使用zxing庫)

    Android中二維碼的掃描和生成(使用zxing庫)

    ZXing是一個開放源碼的,用Java實現(xiàn)的多種格式的1D/2D條碼圖像處理庫,它包含了聯(lián)系到其他語言的端口,下面這篇文章主要給大家介紹了關(guān)于Android中二維碼掃描和生成的相關(guān)資料,主要使用的zxing庫,需要的朋友可以參考下
    2022-09-09
  • Android實現(xiàn)多參數(shù)文件和數(shù)據(jù)上傳

    Android實現(xiàn)多參數(shù)文件和數(shù)據(jù)上傳

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)多參數(shù)文件和數(shù)據(jù)上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android實現(xiàn)定制桌面的方法

    Android實現(xiàn)定制桌面的方法

    這篇文章主要介紹了Android實現(xiàn)定制桌面的方法,較為詳細(xì)的分析了Android定制桌面的相關(guān)注意事項及具體技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android性能優(yōu)化以及數(shù)據(jù)優(yōu)化方法

    Android性能優(yōu)化以及數(shù)據(jù)優(yōu)化方法

    我和大家之前一起探討了在Android中對SQLite數(shù)據(jù)庫的操作優(yōu)化細(xì)節(jié)。今天談?wù)凙ndroid性能數(shù)據(jù)優(yōu)化方法,需要的朋友可以參考下
    2016-05-05
  • Android實現(xiàn)九宮格解鎖的實例代碼

    Android實現(xiàn)九宮格解鎖的實例代碼

    本篇文章主要介紹了Android九宮格解鎖的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 仿Iphone中搜索結(jié)果的布局詳解

    仿Iphone中搜索結(jié)果的布局詳解

    本篇文章是對仿Iphone中搜索結(jié)果的布局進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Android實現(xiàn)簡單實用的垂直進(jìn)度條

    Android實現(xiàn)簡單實用的垂直進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)簡單實用的垂直進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Android Fragment監(jiān)聽返回鍵的一種合理方式

    Android Fragment監(jiān)聽返回鍵的一種合理方式

    這篇文章主要給大家介紹了關(guān)于Android Fragment監(jiān)聽返回鍵的一種合理方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Android實現(xiàn)鬧鐘小程序

    Android實現(xiàn)鬧鐘小程序

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)鬧鐘小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Android學(xué)習(xí)之Fragment

    Android學(xué)習(xí)之Fragment

    Fragment是什么?碎片(Fragment)是一種可以嵌入在活動(activity)當(dāng)中的UI片段,想要了解碎片的簡單用法的朋友可以參考一下
    2016-01-01

最新評論

呼伦贝尔市| 荔浦县| 垫江县| 永康市| 鄯善县| 读书| 涟水县| 绥棱县| 宁海县| 七台河市| 玉山县| 青田县| 土默特左旗| 蓬莱市| 九江市| 行唐县| 玉龙| 镇远县| 蒙山县| 和龙市| 芷江| 惠来县| 辽源市| 区。| 浦县| 盐城市| 丹巴县| 南京市| 鸡泽县| 德钦县| 深州市| 襄城县| 深水埗区| 海阳市| 仲巴县| 武乡县| 罗平县| 扎兰屯市| 六枝特区| 宁化县| 永靖县|