1. 程式人生 > >應用中可隨手勢移動的控制元件

應用中可隨手勢移動的控制元件

private int startX , startY , endX, endY ;
private int screenWidth , screenHeight;
private int lastX, lastY ;
private DisplayMetrics dm;
獲取螢幕寬高
dm = getResources().getDisplayMetrics();

screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels - getStatusBarHeight();
給控制元件設定ontouch事件

ziyou.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

               switch (event.getAction()){

                   case MotionEvent.ACTION_DOWN:

                       lastX = (int) event.getRawX();// 獲取觸控事件觸控位置的原始X座標
                       lastY = (int) event.getRawY();
                       //記錄初始點選位置
                       startX = (int) event.getRawX();// 獲取觸控事件觸控位置的原始X座標
                       startY = (int) event.getRawY();

                       break;
                   case MotionEvent.ACTION_MOVE:

                        //移動距離
                       int dx = (int) event.getRawX() - lastX;
                       int dy = (int) event.getRawY() - lastY;
                       //移動後的上下左右
                       int l = v.getLeft() + dx;
                       int b = v.getBottom() + dy;
                       int r = v.getRight() + dx;
                       int t = v.getTop() + dy;
                       // 下面判斷移動是否超出螢幕
                       if (l < 0) {
                           l = 0;
                           r = l + v.getWidth();
                       }
                       if (t < 0) {
                           t = 0;
                           b = t + v.getHeight();
                       }
                       if (r > screenWidth) {
                           r = screenWidth;
                           l = r - v.getWidth();
                       }
                       if (b > screenHeight) {
                           b = screenHeight;
                           t = b - v.getHeight();
                       }
                       v.layout(l, t, r, b);
                       lastX = (int) event.getRawX();
                       lastY = (int) event.getRawY();
                       v.postInvalidate();

                       break;
                   case MotionEvent.ACTION_UP:

                       //記錄結束點選位置
                       endX = (int) event.getRawX();
                       endY = (int) event.getRawY();
                       
                       if (endX == startX && endY == startY) {

                           ToastUtil.showToast(MainActivity.this,"點選了靈活按鍵");
                       }
                       break;
                   default:
                       break;
               }
               return true;
            }
        });

相關推薦

應用手勢移動控制元件

private int startX , startY , endX, endY ; private int screenWidth , screenHeight; private int lastX, lastY ; private DisplayMetrics dm

讓你的Winform應用在執行時自由拖放控制元件位置

有這樣一個場景,有AB兩個客戶總對介面擺放有著不同的喜好,一個喜歡查詢條件輸入區(被放在一個groupbox中)在介面的上半部分,輸入區在下半部分(被放在另一個groupbox中),另一個使用者則正好相反,所以我們在介面設計確認時今天A在時,我們聽他的要求,改一次,明天A去開會了,B來確認,又讓我們改回來

UGUI控制元件拖拽移動元件

由於Unity3d自帶的UGUI不帶拖拽功能,想要實現拖拽功能,必須自己實現拖拽類.所以我寫了一個通用的UGUI拖拽元件,使用方便. 使用方法: 直接放到要拖拽的UI元件上,設定目標移動的物件即可,也可以不設定目標物件,預設是拖動物件自己. using UnityEngin

WinForm使用自定義Tooltip控制元件

private ToolTip tooltipCtr; 建構函式中: 隱藏預設的Tooltip:this.ShowCellToolTips = false; this.tooltipCtr = new ToolTip(); 設定停留時間(還有許多其他時間設定):thi

基於jquery的查詢多級select控制元件記錄歷史選擇)

;(function($,window,document){ var pluginName = 'multiSelect', defaults = { type: '1',//select層級onetwo data:[], field:[],//資料欄位名

WinForm如何實現在容器控制元件嵌入form窗體(panel與子窗體)

今天在做專案時候遇到一個問題,窗體分為左右兩部分,要求在左邊欄點選按鈕時,右邊動態載入窗體最後想到用panel實現,經歷幾次失敗,並查詢資料後,終於搞定說明:如果多次切換需加入 panel.clear();清空原有panel內容環境:C# VS2008 方法一:通過給panel載入子元素實現

仿QQ空間之打造個性化拉伸頭部控制元件

(使用格式工廠將視訊轉換成gif格式時影響了gif效果,執行在真機上不影響效果) 這個效果是採用ListView並給ListView新增一個頭部來實現的,當然了要處理ListView的上拉,下拉及鬆開肯定要對ListView自定義; 先來看下ListView的頭部xml檔案:

C# DataGridView單元格動態新增多個控制元件

簡介:          在DataGridView的單元格中動態新增多個控制元件。例如在DataGridViewTextBox單元格中,新增CheckBox和Button控制元件。主題思路就是一個動態控制元件的大小,位置,顯示,事件設定,和平常

C#如何線上程修改我的窗體控制元件的text文字

以下辦法實驗成功: 執行緒不能操作窗體控制元件,會引發異常,建議使用委託進行窗體控制元件的操作,包括 改text. 1、定義委託 delegate void SetTextCallback(string text); 2、實現委託 priv

Android佈局動態修改TextView等控制元件文字的顏色

在Android介面展示資訊時,有時我們需要相近或相鄰的文字顯示不同的文字格式,這時該怎麼辦呢?我們有至少兩種辦法: 新增多個控制元件 在控制元件修改區域性文字 今天我們來談一下如何在控制元件中修改區域性文字。 1、SpannableStringB

Android自定義滑動選中控制元件WheelView

WheelView a great functional custom WheelView with demo in dialog and bottomDialog,android 滾動選擇控制元件,滾動選擇器 ========= How to

說說 Android UI 的 ListView(列表控制元件

當程式中有大量的資料需要展示時,就需要用到 ListView 啦。ListView 允許使用者通過手指上下滑動的方式將螢幕外的資料滾動到螢幕內,同時螢幕上原有的資料則會滾動出螢幕。 1 基本用法 佈局檔案中加入 ListView: <?xml

用C#如何遍歷一個窗體的某一種控制元件

      如果我要遍歷所有的Label控制元件.我們知道一個窗體中的所有控制元件都是Form.Controls中的成員,想要得到窗體中的所以成員,可以用foreach來遍歷Controls屬性中的物件。注意,Controls屬性中包含的物件都是以Control基類形式存在

Android簽到的日曆控制元件

最近在公司的功能需求中,需要實現可以簽到的日曆,簽到後在簽到過的日期做標誌。本功能參考了網上一些大神的日曆控制元件,在此基礎上進行修改,已滿足本公司的需求,現已完成,記錄一下。 佈局檔案: <RelativeLayout xmlns:android

【Bootstrap Table】在指定列新增下拉框控制元件,並獲取所選值

背景   最近在使用Bootstrap table ,有一個在某一列新增一個下拉列表,並且通過 “getAllSelections”方法獲取所選行的需求,在實現這個功能的時,走了一些彎路,遇到了一些坑。所以今天總結出來,既是自己的學習,也分享給大家,

通過ItemDataBound事件操作資料控制元件巢狀的其他控制元件

首先,需要在控制元件中宣告ItemDataBound事件。 其次,在code檔案中實現事件。 再次,程式碼示例如下。 <span style="font-size:14px;">protected void rptPhoto_ItemDataBound(obje

mfc通過觸發List Box 控制元件來顯示圖片

幫小學弟寫的一個mfc的小程式,比較簡單。 1.觸發List Bo控制元件的左鍵單擊事件 void Ctest_pictureDlg::OnLbnDblclkList1() { // TODO: 在此新增控制元件通知處理程式程式碼 int nIndex =

分享個Duilib基於wke的瀏覽器控制元件

概述 wke是基於谷歌chrome瀏覽器原始碼的裁剪版本,大小僅僅只有10M左右,無需依賴其他的擴充套件庫(跟CEF的一大堆大約40M的DLL來比簡直爽呆了),就可以在本地使用谷歌核心快速載入網頁。網上也有基於wke在Duilib 上擴充套件的控制元件程式碼,其

android自動化測試hierarchyviewer和uiautomatorviewer獲取控制元件資訊的方式比對

android自動化新人一個,目前研究PC端獲取android裝置的控制元件資訊有哪些方式。多多指教!         android的目錄tools下有2個自帶的工具hierarchyviewer和uiautomatorviewer,開啟後,如下所示:

Android以JAR形式封裝控制元件 或者類庫

在開發過程中經常需要將程式碼封裝後交付使用,在Android中也是如此 下面是封裝的步驟 建立一個沒有Activity的Android的工程 1將res中的資源全部刪除 2刪除AndroidManifest.xml中資源的引用   類似這樣的程式碼a