線上直播系統原始碼,滾動式內容展示控制元件
線上直播系統原始碼,滾動式內容展示控制元件實現的相關程式碼
原始碼:
public class RollView extends FrameLayout { private static final int DEFAULTTEXTSIZE = 16; private static final int DEFAULTTEXTHEIGHT = 72; private List<?> contents = new LinkedList<>(); private float textSize; private int textColor = Color.BLACK; //當前顯示內容在集合中的下標 private int curIndex = -1; //下一個顯示的下標 private TextView curText; private TextView nextText; private int hSize; private int wSize; private TranslateAnimation outAnim; private TranslateAnimation inAnim; //是否執行動畫中 private boolean isAnimationing = false; private onItemClickListener listener; private MyHandler handler = new MyHandler(this); public RollView(Context context) { this(context, null); } public RollView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public RollView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); } private void init(Context context, AttributeSet attrs) { View view = LayoutInflater.from(context).inflate(R.layout.custom_rollview_layout, this); curText = ((TextView) view.findViewById(R.id.curText)); nextText = ((TextView) view.findViewById(R.id.nextText)); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.RollView); float tmpTextSize = ta.getInteger(R.styleable.RollView_rollSize, DEFAULTTEXTSIZE); textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, tmpTextSize, getResources().getDisplayMetrics()); int colorRes = ta.getResourceId(R.styleable.RollView_rollColor, -1); int colorRes2 = ta.getColor(R.styleable.RollView_rollColor, -1); curText.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //如果是執行動畫中,就不響應點選事件 if (isAnimationing) { return; } else { if (listener != null) { listener.onClick(curIndex); } } } }); if (colorRes != -1) { textColor = colorRes; } else if (colorRes2 != -1) { textColor = colorRes2; } curText.setTextSize(textSize); curText.setTextColor(textColor); nextText.setTextSize(textSize); nextText.setTextColor(textColor); ta.recycle(); } public void setListener(onItemClickListener listener) { this.listener = listener; } /** * 可以是自定義型別,只需要重新toString() 方法 * @param contents */ public void setObjContents(List<?> contents) { if (contents == null || contents.size() == 0) { return; } this.contents.clear(); List<String> list = new LinkedList<>(); for (Object content : contents) { list.add(content.toString()); } setContents(list); } public void setContents(List<String> contents) { if (contents == null || contents.size() == 0) { return; } this.contents = contents; initData(); } private void initData() { curIndex = 0; if (contents.size() > 0) { curText.setText(contents.get(0).toString()); } if (contents.size() > 1) { nextText.setText(contents.get(1).toString()); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int wMode = MeasureSpec.getMode(widthMeasureSpec); int hMode = MeasureSpec.getMode(heightMeasureSpec); hSize = MeasureSpec.getSize(heightMeasureSpec); wSize = MeasureSpec.getSize(widthMeasureSpec); switch (hMode) { case MeasureSpec.EXACTLY: break; case MeasureSpec.AT_MOST: case MeasureSpec.UNSPECIFIED: hSize = DEFAULTTEXTHEIGHT; break; } setMeasuredDimension(wSize, hSize); outAnim = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -hSize); //動畫結束時,將控制元件還原到初始化狀態,必須設定這個 outAnim.setFillEnabled(true); outAnim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { isAnimationing = true; } @Override public void onAnimationEnd(Animation animation) { isAnimationing = false; curIndex++; curIndex = curIndex % contents.size();//滾動到最後一條資料了,下一條顯示第一條資料 int nextIndex = (curIndex + 1) % contents.size();//獲取nextText 需要顯示的下一條資料的下標 /** * 這裡的含義是:動畫結束後,控制元件還原到初始化狀態, * curText 就需要顯示滾動後的 nextText 的內容,起到介面沒有視覺差 * nextText 就需要顯示,下下條資料,為了下次滾動做準備 */ curText.setText(contents.get(curIndex).toString()); nextText.setText(contents.get(nextIndex).toString()); //動畫結束後,延遲3秒繼續滾動 handler.sendEmptyMessageDelayed(0, 2000); } @Override public void onAnimationRepeat(Animation animation) { } }); outAnim.setDuration(1000); inAnim = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, hSize, Animation.ABSOLUTE, 0); inAnim.setFillEnabled(true); inAnim.setDuration(1000); } /** * 開始滾動,數量必須大於1才會滾動,每3秒滾動一次 */ public void startRoll() { if (contents.isEmpty() || contents.size() == 1) { return; } handler.sendEmptyMessageDelayed(0, 2000); } private void roll() { if (isAnimationing) { return; } curText.startAnimation(outAnim); nextText.startAnimation(inAnim); } private static class MyHandler extends Handler { private WeakReference<RollView> weakReference; public MyHandler(RollView rollView) { this.weakReference = new WeakReference<>(rollView); } @Override public void handleMessage(Message msg) { RollView rollView = weakReference.get(); if (rollView == null) { return; } rollView.roll(); } } public interface onItemClickListener { /** * 這裡也可以用泛型,返回當前顯示的自定義資料,為了簡單,這裡就只返回當前點選的位置 * @param position */ void onClick(int position); } }
自定義的佈局:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android=" android:id="@+id/textContent" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/nextText" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:background="@color/white" android:gravity="center_vertical" android:maxLines="1" android:text="nextText" android:textColor="@color/black" android:textSize="@dimen/sp_16" /> <TextView android:id="@+id/curText" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:background="@color/white" android:gravity="center_vertical" android:maxLines="1" android:text="curText" android:textColor="@color/black" android:textSize="@dimen/sp_16" /> </FrameLayout>
自定義屬性:
<declare-styleable name="RollView"> <attr name="rollSize" format="integer" /> <attr name="rollColor" format="reference|color" /> </declare-styleable>
使用:
<RollView android:id="@+id/rollView" android:layout_width="match_parent" android:layout_height="@dimen/dp_56" android:background="@color/white" android:paddingLeft="@dimen/dp_20" app:rollSize="20" />
程式碼:
List<String> contents = new LinkedList<>(); contents.add("lingtao"); contents.add("lingtao1"); contents.add("lingtao2"); contents.add("lingtao3"); rollView.setContents(contents); rollView.setListener(new RollView.onItemClickListener() { @Override public void onClick(int position) { LogUtils.d("TestActivity_log", "onClick: " + contents.get(position)); } }); rollView.startRoll();
以上就是 線上直播系統原始碼,滾動式內容展示控制元件實現的相關程式碼,更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2837559/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 線上直播系統原始碼,迴圈滾動RecyclerView的實現原始碼View
- 線上直播系統原始碼,進入新的介面後自動重新整理內容原始碼
- 直播app系統原始碼,css優化滾動條樣式APP原始碼CSS優化
- 線上直播系統原始碼,實現翻頁載入、下拉滾動載入原始碼
- 線上直播系統原始碼,LinearLayout下多個ListView實現滾動原始碼View
- 直播系統原始碼,vue實現無縫滾動原始碼Vue
- 線上直播系統原始碼,橫向無限迴圈滾動的單行彈幕效果原始碼
- 線上直播系統原始碼,flutter 巢狀滑動實現原始碼Flutter巢狀
- 線上直播系統原始碼,取CTreeCtrl控制元件選中節點的文字原始碼控制元件
- 線上直播原始碼,JS動態效果之,側邊欄滾動固定效果原始碼JS
- 直播app系統原始碼,輸入完內容後自動隱藏軟鍵盤APP原始碼
- 直播系統原始碼,圖片一直滾動,迴圈滾動,豎向和橫向原始碼
- 使用SendMessage函式滾動文字框控制元件中的內容 (轉)函式控制元件
- asp.net Repeater控制元件內容上下滾動播放ASP.NET控制元件
- 直播原始碼,實現內容列表的豎向滑動原始碼
- 直播商城原始碼,vue 彈窗 慣性滾動 加速滾動原始碼Vue
- 直播平臺原始碼,當內容超過視窗高度時,可以使用滾輪來檢視內容原始碼
- 線上直播原始碼,VUE 獲獎名單滾動顯示的兩種方式原始碼Vue
- 企業內部線上培訓系統原始碼原始碼
- 教育直播原始碼:如何進行線上教育系統搭建?原始碼
- 線上直播系統原始碼,自定義底部 BottomNavigationBar原始碼Navigation
- 線上直播系統原始碼,彈出警告/提示類彈窗原始碼
- 線上直播系統原始碼,當前版本號頁面呈現原始碼
- 直播系統原始碼,點選滾動的輪播圖自動跳轉到相應頁原始碼
- 視訊直播原始碼,新增內容滑動條,停止滑動時隱藏原始碼
- 線上直播系統原始碼,簡單實現Android應用的啟動頁原始碼Android
- 直播賣貨系統原始碼中,如何展示html格式的商品詳情原始碼HTML
- 智慧黨建宣傳展示系統平臺展示內容pad可控
- 線上直播系統原始碼,vue實現搜尋文字高亮功能原始碼Vue
- 線上直播系統原始碼,滑鼠懸停後彈出氣泡原始碼
- 線上直播系統原始碼,Dart-Flutter DateTime日期轉換原始碼DartFlutter
- app直播原始碼,flutter Text自動計算文字內容的寬度APP原始碼Flutter
- 直播APP原始碼實現直播流程上需要注意的內容APP原始碼
- 直播軟體原始碼,橫向滾動 自定義底部指示器樣式原始碼
- 語音直播系統原始碼與視訊直播系統原始碼哪些區別原始碼
- 直播原始碼,懸浮窗滾動漸變色效果原始碼
- 直播軟體原始碼,自定義RecyclerView支援快速滾動原始碼View
- 成品直播原始碼推薦,uniapp多行滾動通知原始碼APP