Android會議室管理app
1 先來張圖
2 原理
2.1系統原理
實現了會議室的預定功能,且通過日曆時間軸等等控制元件來控制會議室的使用。
2.2資料庫
2.3TimeLine控制元件原始碼
2.4專案下載package com.example.shijianzhou; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import android.content.Context; import android.os.Handler; import android.os.SystemClock; import android.text.format.Time; import android.util.AttributeSet; import android.view.Display; import android.view.LayoutInflater; import android.view.WindowManager; import android.widget.ImageView; import android.widget.LinearLayout; /** * 用來實現會議預定的時間軸。 * * @version 0.1 * @author zhou * */ public class TimeLine extends LinearLayout { private Runnable mTicker; private Handler mHandler; /** * 控制定時執行緒是否執行的flag。 */ private boolean mTickerStopped; private Calendar mCalendar; private String mFormat = "hh:mm:ss"; private ImageView pasttime; private int Width; private int Height; private LinearLayout mainline; private ArrayList<HashMap<String, Integer>> huiyitimelist; public TimeLine(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub LayoutInflater.from(context).inflate(R.layout.timeline, this, true); pasttime = (ImageView) findViewById(R.id.pasttime); mainline = (LinearLayout) findViewById(R.id.mainline); initTimeLine(context); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); setmTickerstart(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mTickerStopped = true; } private void initTimeLine(Context context) { if (mCalendar == null) { mCalendar = Calendar.getInstance(); } huiyitimelist = new ArrayList<HashMap<String, Integer>>(); // 取得螢幕的寬度和高度 WindowManager windowManager = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); Width = display.getWidth(); Height = display.getHeight(); } /** * * 移動遊標到指定位置。 * * @param position * 位置引數。 */ public void movePoint(int position) { android.view.ViewGroup.LayoutParams params = pasttime.getLayoutParams(); params.width = position; pasttime.setLayoutParams(params); } /** * * 使時間軸上指定的一段變紅,即該段時間會議室已經被預定。 * * @param start * 起始時間(秒) * @param end * 結束時間(秒) * * @return -1 失敗 1 成功。 */ public int setSegmentRed(int start, int end) { HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("starttime", start); map.put("endtime", end); start = start * Width / (24 * 60 * 60); end = end * Width / (24 * 60 * 60); map.put("start", start); map.put("end", end); if (end <= start) { return -1;// 代表會議時間錯誤。 } for (int i = 0; i < huiyitimelist.size(); i++) { int startlocal = huiyitimelist.get(i).get("start"); int endlocal = huiyitimelist.get(i).get("end"); if ((start > startlocal & start < endlocal) | (end > startlocal & end < endlocal)) { return -2;// 代表會議時間衝突。 } } huiyitimelist.add(map); mainline.removeAllViews(); for (int i = 0; i < huiyitimelist.size(); i++) { int startlocal = huiyitimelist.get(i).get("start"); int endlocal = huiyitimelist.get(i).get("end"); LinearLayout layout_sub_Lin = new LinearLayout(getContext()); LinearLayout.LayoutParams LP_WW = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); LP_WW.width = (endlocal - startlocal); if (i == 0) { LP_WW.leftMargin = startlocal; } else { LP_WW.leftMargin = startlocal - huiyitimelist.get(i - 1).get("end"); } layout_sub_Lin.setLayoutParams(LP_WW); layout_sub_Lin.setBackgroundColor(0x88ffff00); mainline.addView(layout_sub_Lin); } return 1; } /** * 清除所有時間軸上的會議佔用時間標記。 */ public void clearAllsegment() { mainline.removeAllViews(); huiyitimelist.clear(); } /** * 控制定時器是否繼續工作。 * * @param mTickerStopped * true則時鐘停止。 */ public void setmTickerStopped() { mTickerStopped = true; movePoint(0); } /** * 時間軸動起來。 */ public void setmTickerstart() { // TODO Auto-generated method stub mTickerStopped = false; mHandler = new Handler(); mTicker = new Runnable() { public void run() { if (mTickerStopped) { return; } else { mCalendar.setTimeInMillis(System.currentTimeMillis()); Time t = new Time(); // or Time t=new Time("GMT+8"); 加上Time // Zone資料。 t.setToNow(); // 取得系統時間。 int hour = t.hour; // 0-23 int minute = t.minute; int second = t.second; int allseconds = hour * 60 * 60 + minute * 60 + second; int point = allseconds * Width / (24 * 60 * 60); movePoint(point); invalidate(); // 遍歷是否有會議開始或者結束。 // Log.v("znz", "size --> " + huiyitimelist.size()); // Log.v("znz", // "starttime --> " // + huiyitimelist.get(0).get("starttime")); // Log.v("znz", "allseconds ---> " + allseconds); // Log.v("znz", // "endtime --> " + huiyitimelist.get(0).get("endtime")); for (int i = 0; i < huiyitimelist.size(); i++) { if (allseconds >= huiyitimelist.get(i).get("starttime") & allseconds <= huiyitimelist.get(i).get( "endtime")) { if (timelinecallback != null) { timelinecallback.huiyiStarted(huiyitimelist .get(i).get("starttime"), huiyitimelist .get(i).get("endtime")); break; } } if (i == (huiyitimelist.size() - 1)) { if (timelinecallback != null) { timelinecallback.huiyiStoped(); } } } long now = SystemClock.uptimeMillis(); long next = now + (1000 - System.currentTimeMillis() % 1000); mHandler.postAtTime(mTicker, next); } } }; mTicker.run(); } private TimelineCallback timelinecallback; /** * @param timelinecallback * the timelinecallback to set */ public void setTimelinecallback(TimelineCallback timelinecallback) { this.timelinecallback = timelinecallback; } }
相關推薦
Android會議室管理app
1 先來張圖 2 原理 2.1系統原理 實現了會議室的預定功能,且通過日曆時間軸等等控制元件來控制會議室的使用。 2.2資料庫 2.3TimeLine控制元件原始碼 package com.example.shijianzhou; import java.util.
[譯]Android記憶體管理: 理解App的PSS
Android記憶體管理: 理解App的PSS 當在應用程式上執行Little Eye時,在記憶體檢視中,會報告有關應用程式記憶體的3個重要統計資訊。 Dalvik記憶體使用情況,即Java堆消耗的記憶體量,Native記憶體,即JVM外部程序使用的記憶體
日程管理app(bug report)
報錯 進行 android 設置 用戶登錄 登錄驗證 理想 運行 rip 一、用戶登錄驗證密碼過短 Description: 測試環境:Android Studio自帶的ADT模擬器(安卓6.0) 準備工作:將工程導入AS,並啟動模擬器進行測試 測試步驟:1
日程管理APP的測試計劃和測試矩陣
集成 說明 計劃 idt 無線 roi ble -c nbsp 測試計劃:(完成整個APP時間:2周) 編號 測試時間 測試內容 1 第2天 在需求設計階段,檢查產品說明文檔及設計文檔 2 第3~9天 在編碼階段,編寫測試用例 3 第10~11天 集成測試
學生管理App測試計劃余測試矩陣
andro 管理員 屏幕分辨率 分辨率 ios 4.4 開始 ble 學生 學生管理測試計劃: 裏程碑項目 開始時間 結束時間 測試規劃 2017.4.1 2017.4.2 測試設計 2017.4.2 2017.4.3 測試設計實施 2017.4.4 20
日程管理APP測試用例
nbsp 圖庫 代碼實現 符號 訪問 攝像 led height 測試用例 No. 測試用例 實際結果 期望結果 測試結果(Pass/Failed) 備註 1 輸入僅有數字或字母的用戶名及密碼,點擊註冊 註冊成功 註冊成功 Pass / 2 輸入含有特殊符
Android 輸入管理服務-輸入事件到達之後的處理流程
content 例如 enter 技術 fontsize tail 流程 ref ora 接上一篇博客“Android 輸入管理服務啟動過程的流程”。這兩天分析了Android 輸入管理服務接收到輸入事件之後的處理流程,詳細流程例如以下面兩圖所看到的:
在Android中使App高速、簡單地支持新浪微博、微信、QQ、facebook等十幾個主流社交平臺的分享功能
分析 ont renren androidm mod 執行 xen 12px 操作 前言 在如今的APP或者遊戲中,分享功能差點兒已經成為標配。分享功能不但能夠滿足用戶的需求。也能夠為產品帶來很多其它的用戶,甚至能夠對用戶的行為、活躍度、年齡段等情況進行數據統計,使得軟
新智慧管理APP,為服務商量身打造
采寶管理APP 采寶支付服務平臺 盼望著,盼望著,屬於咱們采寶服務商自己的“采寶聯盟APP”,今天正式上線了!合作夥伴們(包括管理員、業務員賬號)除了可以繼續在“采寶服務商後臺系統”操作外,在手機上下載安裝一個“采寶聯盟APP” ,就能盡享“一機在手,商戶我有”的暢快!
Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.setHomeButtonEnabled(boolean)' on a null object reference
tac perf cti pla invoke one spa n) null 【Android】getActionBar()為null的解決方法總結 setContentView(R.layout.activity_main);android.support.v7.app
日程管理app
post 筆記 方法 ase ng- 格子 筆記本 view 背景 背景: 普通的筆記本顯然具有保存占用較大空間的弊端。而筆記類app又借助於虛擬按鍵輸入,便利度稍
【Android Studio安裝部署系列】十八、Android studio更換APP應用圖標
tail map 安全區 大小 next detail 有時 ash blog 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 概述 Android Studio新建項目後會有一個默認圖標,那麽如何更換圖標呢? 替換圖標 這個方案不建議直接在已有項目上更換
Android包管理機制(二)PackageInstaller安裝APK
tac _id cas 賦值 complete get Owner 執行 context 前言 在本系列上一篇文章Android包管理機制(一)PackageInstaller的初始化中我們學習了PackageInstaller是如何初始化的,這一篇文章我們接著學習Pack
Android 監聽APP進入後臺或切換到前臺方案對比
api 5.0 等等 推薦一個 情況 lis 需要 推出 soc 在我們開發的過程中,經常會遇到需要我們判斷app進入後臺,或者切換到前臺的情況。比如我們想判斷app切換到前臺時,顯示一個解鎖界面,要求用戶輸入解鎖密碼才能繼續進行操作;我們想判斷app切換到後臺,記錄一下l
Android學習之APP點擊功能閃退問題的處理一
分享 com info png 事件 測試 問題: 代碼 src java代碼如下: activity_main.xml代碼如下: APP測試問題:安裝好APP後,點擊“點擊事件”,APP會閃退 檢查方向: 1.查看java代碼中的成員變量textview是否初始化 2
Android P的APP適配總結,讓你快人一步
信息 最新 webview 包名 圖片 bmp illegal 名單 block 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由QQ音樂技術團隊發表於雲+社區專欄 上篇:Android P 行為變更適配 Android P 這次有很多行為變更,其中不
必須做作業三:某Android端點餐App中觀察者模式解析
onclick https 直接 tro lstat strong set lis drag 該項目還在開發中,目前開發了原型界面,是為了實現顧客從點餐到付款的全行為流程。並且提供菜品的詳情頁面和其他服務接口。 在此就以點餐界面的實現為例,分析該項目的觀察者模式 一、模
Android 7.0 app升級內部安裝apk—FileProvider使用
隨著Android 版本升級 Google在保護使用者隱私和安全方面增加了力度 像Android 6.0 細分了普通許可權和高危許可權,涉及到高危許可權則需要及時申請使用者必須感知。Android7.0 增加了 "StrictMode API" 政策即私有目錄限制訪問。本篇講解一下如何在Androi
Android 記憶體管理記錄
專案中用到大量大圖,造成快速切換Activity後記憶體不足,如登入介面用到3M高清大圖,裝置選擇用到5張大圖背景疊加效果,主介面用到了5張遮罩大圖,設定介面總的子activity中也有大圖出現。 啟動Splash——裝置選擇介面(保留棧低,不finish,但會把背景圖片回收)-->主介面-
android 如何判讀app應用是否擁有某種許可權
"android.permission.CAMERA"表示要判斷的許可權,此處以相機許可權為例說明 "com.zhengyuan.learningqrscan"表示專案的包名 //動態申請許可權 private void getPrimission() { Packa