首先,元件能填充許多小的字元元件如textview,所以它必須是乙個viewgroup
滑動問題, 支援上下滑動,需要我們重寫ontouchevent事件,與view的scrollto和scrollby來完成
測量 – onmeausre測量元件自身的大小
@override
protected
void
onmeasure(int widthmeasurespec, int heightmeasurespec)
主要是給定當前元件乙個固定的高度view_default_height,並且這個高度在後續的擴張和縮小會用到
布局放置 – onlayout放置每個child的位置
布局思想就是:
寬度的布局: 依次測量每個child的寬度並累加,如果寬度和大於viewgroup的寬度,就把前面幾個child拿來進行一行的布局,在此條件下還有可能出現剩餘空間,將剩餘空間分攤到每個元件上去即可;如下圖:
高度的布局: 記錄每一行的的高度布局位置,下次布局從上次的高度布局開始向下布局即可,
實現**如下:
@override
protected
void
onlayout(boolean changed, int l, int t, int r, int b)
}/**
* 說明還有一部分沒有布局的child
*/if(end_index != childcount)
second_enter++;
}/**
* 布局一行的元件檢視
*@param start_index 其實child
*@param end_index 結束child
*@param start_x x開始的位置
*@param start_y y開始的位置
*@param space 一行剩餘的空間
*/private
void
onlayoutchildview(int start_index, int end_index, int start_x, int start_y, int space)
int i;
for(i = start_index; i < end_index; i++)
//每排最後乙個必須等於右邊限制的位置,對齊;除了最後一排單獨幾個那種
if(i == end_index - 1 && space != 0)
child.layout(start_x, start_y, endx, endy);
start_x = endx + default_space;
}if(i == childcount)
}
觸控滑動
設計思想:
看圖就明白了,主要是判斷向上和向下的滑動距離,要限制其滑動的最大距離
**很簡單,如下:
@override
public
boolean
ontouchevent(motionevent event)
int action = event.getaction();
switch (action)else
if (need_move_y > moveupdistance)else
downy = movey;
break;
case motionevent.action_up:
break;
default:
break;
}return
true;}}
完成到這裡,元件就可以上下滑動了;但是在這兒有個問題,我也沒搞懂,當你新增的child設定了setonclick後滑動就會受干擾,如果是addtouchlistener的話就能正常的上下滑動,根據監聽事件的傳遞機制是:dispatch – ontouch – intecpttouch – ontouchevent – onclick,而且這又涉及了很多child我懷疑是某個child消費了滑動事件導致的,但是還沒找到解決方法,哪位能解決了,還請告知
至此,元件就設計完成了,原始碼在下面:
Vue自定義元件 簡單實現乙個自定義元件
在用vue構建專案的過程中,我們有時會用到別人開發的元件如vue router 使用他人元件的正常步驟如下 1 命令列進行安裝,執行install 2 在vue專案中的入口檔案main.js中,進行匯入 3 然後用vue.use plugin 引入該元件。我們也可以創造屬於自己的元件,具體步驟如下 ...
Vue自定義元件 簡單實現乙個自定義元件
在用vue構建專案的過程中,我們有時會用到別人開發的元件如vue router 使用他人元件的正常步驟如下 1 命令列進行安裝,執行install 2 在vue專案中的入口檔案main.js中,進行匯入 3 然後用vue.use plugin 引入該元件。我們也可以創造屬於自己的元件,具體步驟如下 ...
一款完全可自定義的文字到語音Mac軟體
ghostreader plus是一款可以將文字內容轉換為語音的mac軟體,ghostreader plus通過語音標籤來編輯文字,還可以對文字中的文字,支援讀取odt txt utxt和html檔案。ghostreader plus的直觀設計和廣泛的功能幫助您輕鬆節省時間.ghostreader ...