導航:首頁 > 操作系統 > androidclickable

androidclickable

發布時間:2023-03-23 23:29:46

android自定義View——從零開始實現書籍翻頁效果(一)

前言 :本篇是系列博客的第三篇,這次我們要研究 書籍翻頁效果 。不知道大家平時有沒用過iReader、掌閱這些小說軟體,裡面的翻頁效果感覺十分的酷炫。有心想研究研究如何實現,於是網上找了找,發現這方面的教學資料非常少,所幸能找到 何明桂大大 的 Android 實現書籍翻頁效果----原理篇 這樣的入門博客(感謝大大 Orz),我們就以這篇博客為切入點從零實現我們自己的翻頁效果。由於這次坑比較深,預計會寫好幾期,感興趣的小夥伴可以點下關注以便及時收到更新提醒,謝謝大家的支持 ~

本篇只著重於思路和實現步驟,裡面用到的一些知識原理不會非常細地拿來講,如果有不清楚的api或方法可以在網上搜下相應的資料,肯定有大神講得非常清楚的,我這就不獻丑了。本著認真負責的精神我會把相關知識的博文鏈接也貼出來(其實就是懶不想寫那麼多哈哈),大家可以自行傳送。為了照顧第一次閱讀系列博客的小夥伴,本篇會出現一些在之前 系列博客 就講過的內容,看過的童鞋自行跳過該段即可

國際慣例,先上效果圖,本次主要實現了 基本的上下翻頁效果 右側最大翻頁距離的限制

在看這篇博客之前,希望大家能先了解一下書籍翻頁的實現原理,博客鏈接我已經貼出來了。通過原理講解我們知道,整個書籍翻頁效果界面分成了三個區域, A 為當前頁區域, B 為下一頁區域, C 為當前頁背面,如圖所示

書籍翻頁效果的實現就是要以我們 觸摸屏幕位置的坐標 為基礎繪制出這三個區域,形成模擬翻頁的特效。要繪制這三個區域,我們需要通過一組 特定的點 來完成,這些點的坐標需要通過兩個已知的點( 觸摸點 相對邊緣角 )計算得到,下圖我將各個特定點的位置和計算公式貼出來,大家對照著原理一起理解(渣畫工望體諒 ╮(╯▽╰)╭ ),其中 b 點是由 ae cj 的交點, k 點是由 ah cj 的交點

簡單總結一下, a 是觸摸點, f 是觸摸點相對的邊緣角, eh 我們設置為 af 的垂直平分線,則 g af 的中點, ab ak dj 直線 曲線cdb 是起點為 c ,控制點為 e ,終點為 b 二階貝塞爾曲線 曲線kij 是起點為 k ,控制點為 h ,終點為 j 二階貝塞爾曲線 ,區域 A B C 就由這些點和線劃分開來。我們將這些點稱為標識點,下一步就是模擬設定 a f 點的位置,將這組標識點繪制到屏幕上來驗證我們的計算公式是否正確,創建 BookPageView

實體類 MyPoint 用來存放我們的標識點坐標

界面布局:

在Activity中進行注冊

效果如圖

前文我們提到 ab ak dj 直線 曲線cdb 是起點為 c ,控制點為 e ,終點為 b 二階貝塞爾曲線 曲線kij 是起點為 k ,控制點為 h ,終點為 j 二階貝塞爾曲線 。通過觀察分析得知, 區域A 是由View 左上角 左下角 曲線cdb , 直線 ab ak 曲線kij 右上角 連接而成的區域,修改 BookPageView ,利用 path 繪制處 區域A

效果如圖

區域C 理論上應該是由點 a , b , d , i , k 連接而成的閉合區域,但由於 d i 是曲線上的點,我們沒辦法直接從 d 出發通過 path 繪制路徑連接 b 點( i , k 同理),也就不能只用 path 的情況下直接繪制出 區域C ,我們需要用 PorterDuffXfermode 方面的知識「曲線救國」。我們試著先將點 a , b , d , i , k 連接起來,觀察閉合區域與 區域A 之間的聯系。修改 BookPageView

效果如圖

我們將兩條曲線也畫出來對比觀察

觀察分析後可以得出結論, 區域C 由直線ab,bd,dj,ik,ak連接而成的區域 減去 與區域A交集部分 後剩餘的區域。於是我們設置 區域C 畫筆 Xfermode 模式為 DST_ATOP

效果如圖

最後是 區域B ,因為 區域B 處於最底層,我們直接將 區域B 畫筆 Xfermode 模式設為 DST_ATOP ,在 區域A、C 之後繪制即可,修改 BookPageView

效果如圖

翻頁可以從右下方翻自然也可以從右上方翻,我們將 f 點設在右上角,由於View上下兩部分是呈 鏡像 的,所以各標識點的位置也應該是鏡像對應的,因為 區域B和C 的繪制與 f 點沒有關系,所以我們只需要修改 區域A 的繪制邏輯,新增 getPathAFromTopRight() 方法

效果如圖

之前由於測試效果沒有對View的大小進行重新測量,在實現觸摸翻頁之前先把這個結了。重寫View的 onMeasure() 方法

我們的需求是,在上半部分翻頁時 f 點在右上角,在下半部分翻頁時 f 則在右下角,當手指離開屏幕時回到 初始狀態 ,根據需求,修改 BookPageView

在Activity中監聽View的 onTouch 狀態

注意,要設置 android:clickable true ,否則無法監聽到 ACTION_MOVE ACTION_UP 狀態

效果如圖

到這里我們已經實現了基本的翻頁效果,但要還原真實的書籍翻頁效果,我們還需要設置一些限制條件來完善我們的項目

對於一般的書本來說,最左側應該是釘起來的,也就是說如果我們從右側翻頁,翻動的距離是 有限制的 ,最下方翻頁形成的曲線起點( c 點)的x坐標不能小於0(上方同理),按照這個限定條件,修改我們的 BookPageView

效果如圖

至此本篇教程就告一段落了,當然還有許多功能需要繼續完善,例如橫向翻頁、翻頁動畫、陰影效果等等,這些都會在後面的教程中一一解決。如果大家看了感覺還不錯麻煩點個贊,你們的支持是我最大的動力~

⑵ android 如何實現圖片選取框

在布局文件中建立一個linearlayout,設置為clickable,然後加入一個ImageView,這是布局文件 <LinearLayout android:orientation="vertical" android:layout_height="wrap_content" android:clickable="true" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content android:id="@+id/img" android:layout_gravity="center_horizontal" android:layout_centerVertical="true" android:src="@drawable/360"//這個是你的圖標 /> </LinearLayout> 然後在做一個布局文件,加入也是...

⑶ android 控制項xml屬性

android : orientation     (horizontal/vertical)  設置布局水平還是垂直,默認是垂直  LinearLayout中使用

a ndroid : checked  (true/false) 標記默認選中,如果是單選則選中最後一個 RadioButton、CheckBox中使用

android: layout_gravity   (center/right/left/bottom/top) 父布局中的位置 

android: gravity (center/right/left/bottom/top)自己內容的位置  比如Button中的text 的位置

android: hint   (string)    提示信息,當文本框為空的時候顯示,點擊消失  Edittext中使用

android: singleLine   (true/false)  設置單行輸入,一旦設置為true,則文字不會自動換行

android:textColor(#123456)  設置字體顏色

android: textStyle (bold/italic/bolditalic)設置字形[bold(粗體) 0, italic(斜體) 1, bolditalic(又粗又斜) 2] 可以設置一個或多個,用「|」隔開

android:textSize  (20sp)設置字體大小

android:editable(true/false)是否可編輯  edittext中才有效

android:textColorHighlight (#ffffff) 文字底色

android:textColorHint (#ffffff)提示文字顏色 edittext中才有效

android:textScaleX (1.5)文字距離

android:background  設置背景  可以是圖片、顏色、@drawable/中的樣式

android:layout_weight (1、2、3)權重  一般用在linearLayout中的

android:autoLink(none、web、email、phone、map、all)設置是否當文本為URL鏈接/email/電話號碼/map時,文本顯示為可點擊的鏈接

android: cursorVisible  (true/false)設置游標是否顯示

android: digits (123asdasaf/正則表達式) 限制輸入內容

android: ellipsize (start、end、middle、marquee)設置當文字過長時,該控制項該如何顯示。有如下值設置:」start」省略號顯示在開頭;」end」省略號顯示在結尾;」middle」省略號顯示在中間;」marquee」以跑馬燈的方式顯示(動畫橫向移動)

android :inputType   (none、text、textCapCharacters字母大小、textCapWords單詞首字母大小、textCapSentences僅第一個字母大小、textAutoCorrect、textAutoComplete自動完成、textMultiLine多行輸入、textImeMultiLine輸入法多行(如果支持)、textNoSuggestions不提示、textEmailAddress電子郵件地址、textEmailSubject郵件主題、textShortMessage簡訊息(會多一個表情按鈕出來)、textLongMessage長訊息?、textPersonName人名、textPostalAddress地址、textPassword密碼、textVisiblePassword可見密碼、textWebEditText作為網頁表單的文本、textFilte文本篩選過濾、textPhonetic拼音輸入、numberSigned有符號數字格式、numberDecimal可帶小數點的浮點格式、phone電話號碼、datetime時間日期、date日期、time時間。)設置文本類型

android: maxLines     設置文本的最大顯示行數,與width或者layout_width結合使用,超出部分自動換行,超出行數將不顯示

android:minLines  設置文本的最小行數

android:scrollHorizontally  設置文本超出TextView的寬度的情況下,是否出現橫拉條。

android:clickable (true/false) view是否能對click事件作出反應

android:onClick  當view被click之後,view的context的哪個方法被呼叫。通常這個context是指view所在的Activity。例如:android:onClick='sayHello',則相應的Activity裡面有一個方法public void sayHello(View view)方法,當這個view被click之後,sayHello方法就會被調用。

android:longClickable  true/false  view是否可以對長時間的click事件作出反應。

⑷ Android 懸浮窗如何能讓它和他的的下層一起響應觸摸事件

/**
* 創建一個小懸浮窗。初始位置為屏幕的右部中間位置。
*
* @param context 必須為應用程序的Context.
*/
public static void createSmallWindow(Context context) {
WindowManager windowManager = getWindowManager(context);
int screenWidth = windowManager.getDefaultDisplay().getWidth();
int screenHeight = windowManager.getDefaultDisplay().getHeight();
if (smallWindow == null) {
smallWindow = new FloatWindowSmallView(context);
if (smallWindowParams == null) {
smallWindowParams = new LayoutParams();
smallWindowParams.type = LayoutParams.TYPE_PHONE;
smallWindowParams.format = PixelFormat.RGBA_8888;
smallWindowParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE;
smallWindowParams.gravity = Gravity.LEFT | Gravity.TOP;
smallWindowParams.width = FloatWindowSmallView.viewWidth;
smallWindowParams.height = FloatWindowSmallView.viewHeight;
smallWindowParams.x = screenWidth;
smallWindowParams.y = screenHeight / 2;
}
smallWindow.setParams(smallWindowParams);
windowManager.addView(smallWindow, smallWindowParams);
LogPrinter.i(TAG, "添加了小浮標View");
}
}
smallWindowParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE;

⑸ android SwitchButton 和CheckBox 怎樣設置不可點擊,Clickable無效

  1. 在線程還在進行時設置按鈕不可點擊setClickable(false);

    getState()返回該線程的狀態;

    isAlive()測試線程是否處於活動狀態;

    view都是setClickable(false); 表示不可點擊的;

  2. 當然你還可以直接注冊一個Touche事件,然後在onTouche里return true;

閱讀全文

與androidclickable相關的資料

熱點內容
美團買電影票到店說系統故障 瀏覽:101
有床戲的拉拉片 瀏覽:775
什麼同城約會app好 瀏覽:166
如何下載tis伺服器地圖 瀏覽:430
phpxsl擴展 瀏覽:28
美國電影一個男人帶著一個小孩的 瀏覽:194
日本電影網推薦 瀏覽:895
啄木鳥絲襪女同 瀏覽:226
伺服器怎麼關閉公網訪問 瀏覽:195
嵌入式演算法推薦書籍 瀏覽:677
win7怎樣設置網站伺服器地址 瀏覽:103
程序員代碼炫酷視頻 瀏覽:80
韓國電影愛情推理片下載 瀏覽:64
php後台管理系統模板 瀏覽:334
不太會電腦學習python難嗎 瀏覽:661
蘋果手機7APP怎麼查看 瀏覽:543
導師喜歡python 瀏覽:185
pcb反編譯板 瀏覽:156
十四路末班車電影在線完整版免費 瀏覽:430
字體命令組中 瀏覽:87