當前位置:首頁 » 安卓系統 » android波浪效果圖

android波浪效果圖

發布時間: 2022-09-28 04:24:13

① 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中這樣的曲線要怎麼繪制

推薦你幾個相關開源項目,可以根據需要自己選擇,自己畫還是比較麻煩的:
MPAndroidChart
強大的圖表繪制工具,支持折線圖、面積圖、散點圖、時間圖、柱狀圖、條圖、餅圖、氣泡圖、圓環圖、范圍(高至低)條形圖、網狀圖及各種圖的結合;支持圖的拖拽縮放;支持 Android 2.2 以上,支持橫縱軸縮放,多指縮放,展現動畫、高亮、保存到 sdcard、從文件讀取圖表
achartengine
強大的圖表繪制工具,支持折線圖、面積圖、散點圖、時間圖、柱狀圖、條圖、餅圖、氣泡圖、圓環圖、范圍(高至低)條形圖、撥號圖/表、立方線圖及各種圖的結合
GraphView
繪制圖表和曲線圖的View,可用於Android上的曲形圖、柱狀圖、波浪圖展示
HoloGraphLibrary
繪制線狀圖、柱狀圖、餅狀圖
XCL-Charts
XCL-Charts基於原生的Canvas來繪制各種圖表,在設計時,盡量在保證開發效率的同時,給使用者提供足夠多的定製化能力。因此使用簡便,同時具有相當靈活的定製能力。目前支持3D/非3D柱形圖(Bar Chart)、3D/非3D餅圖(Pie Chart)、堆積圖(Stacked Bar Chart)、面積圖(Area Chart)、 折線圖(Line Chart)、曲線圖(Spline Chart)、環形圖(Dount Chart)、南丁格爾玫瑰圖(Rose Chart)、儀表盤(Dial Chart)、刻度盤(Gauge Chart)、雷達圖(Radar Chart)、圓形圖(Circle Chart)等圖表。其它特性還包括支持圖表縮放、手勢移動、動畫顯示效果、高密度柱形顯示、圖表分界定製線、多圖表的混合顯示及同數據源不同類型圖表切換等。
EazeGraph
Android 圖表庫,支持柱狀圖、分層柱狀圖、餅狀圖、線性圖
WilliamChart
繪制圖表的庫,支持LineChartView、BarChartView和StackBarChartView三中圖表類型,並且支持 Android 2.2及以上的系統。
HelloCharts for Android
支持折線圖、柱狀圖、餅圖、氣泡圖、組合圖;支持預覽、放大縮小,滾動,部分圖表支持動畫;支持 Android 2.2 以上

這些項目都可以在GitHub 搜索到。

③ 如何用android製作出一隻只氣球上升的界面

可以使用Tween動畫實現氣球上升的效果,具體實現如下:
1:在res目錄下新建anim目錄,並添加file_name(文件名自定義就好).xml
添加以下代碼:

<?xmlversion="1.0"encoding="utf-8"?>
<translatexmlns:android="http://schemas.android.com/apk/res/android"
android:ration="5000"
android:fromXDelta="50"
android:fromYDelta="800"
android:toXDelta="50"
android:fillAfter="true"
android:toYDelta="0">
</translate>


注釋:
android:ration="5000" // 動畫持續時間
android:fromXDelta="50" // 起始x坐標
android:fromYDelta="800"// 起始y坐標
android:toXDelta="50" // 結束x坐標
android:fillAfter="true"// 動畫結束後將素材停留在結束位置
android:toYDelta="0" // 結束y坐標

坐標可以通過代碼動態進行計算,本例僅僅演示功能...
2:添加一布局文件 test.xml
代碼如下

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#EFF8FE"
android:orientation="vertical">
<ImageView
android:id="@+id/startup"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="6"
android:background="@drawable/ball"
android:scaleType="fitXY"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:text="@string/string__right"
android:textSize="12sp"/>
</RelativeLayout>
</LinearLayout>


效果圖如下:

java">{
privateImageViewimage;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_startup);
//取得資源
image=(ImageView)findViewById(R.id.startup);
//設置動畫
image.setAnimation(AnimationUtils.loadAnimation(this,
R.anim.translate_sample));
}

④ 如何添加文字下面的紅色波浪線在Android的TextView中

給TextView設置背景或邊框;

⑤ android 怎麼自定義繪制如下圖中這種進度條

下面是安卓學習手冊中實現各種進度條的截圖:

要想看各種進度條的實現代碼和文檔,直接去360手機助手中下載安卓學習手冊,例子文檔隨便看。

1、說明

在某些操作的進度中的可視指示器,為用戶呈現操作的進度,還它有一個次要的進度條,用來顯示中間進度,如在流媒體播放的緩沖區的進度。一個進度條也可不確定其進度。在不確定模式下,進度條顯示循環動畫。這種模式常用於應用程序使用任務的長度是未知的。

2、XML重要屬性

android:progressBarStyle:默認進度條樣式

android:progressBarStyleHorizontal:水平樣式

3 重要方法

getMax():返回這個進度條的范圍的上限

getProgress():返回進度

getSecondaryProgress():返回次要進度

incrementProgressBy(int diff):指定增加的進度

isIndeterminate():指示進度條是否在不確定模式下

setIndeterminate(boolean indeterminate):設置不確定模式下

setVisibility(int v):設置該進度條是否可視

4 重要事件

onSizeChanged(int w, int h, int oldw, int oldh):當進度值改變時引發此事件

5進度條的樣式

Widget.ProgressBar.Horizontal長形進度

Androidxml 布局:

<ProgressBar

android:id="@+id/progress_bar"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

style="@android:style/Widget.ProgressBar.Horizontal "

/>

源碼

private ProgressBar mProgress;

private int mProgressStatus=0;

private Handler mHandler=newHandler();

@Override

protected void onCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mProgress=(ProgressBar)findViewById(R.id.progress_bar);

new Thread(new Runnable(){

@Override

public void run(){

while(mProgressStatus<100){

mProgressStatus=doWork();

mHandler.post(new Runnable(){

@Override

public void run(){

mProgress.setProgress(mProgressStatus);

}

});

}

}

}).start();

}

效果圖:

帶第二進度的進度條

xml配置如下:

<ProgressBar

android:id="@+id/progress_bar_with_second"

style="@android:style/Widget.ProgressBar.Horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:progress="40"

android:secondaryProgress="70"

android:paddingTop="20dp"

android:paddingBottom="20dp"/>

這里我們設置了初始的進度為40,android:progress的值在mini和max之間即mini<=progressvalue<=max

設置了第二進度條的進度值為70,該值也在mini和max之間。

效果如下:

不確定模式進度條

xml配置文件:

<ProgressBar

android:id="@+id/progress_bar_indeterminate"

style="@android:style/Widget.ProgressBar.Horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:indeterminate="true"

android:indeterminateBehavior="cycle"

android:paddingBottom="20dp"

android:paddingTop="20dp"

android:progress="40" />

這里通過android:indeterminate="true"設置了當前為無模式進度條

效果如圖:

普通圓形進度:Widget.ProgressBar.Inverse

<ProgressBar

android:id="@+id/progress_bar1"

style="@android:style/Widget.ProgressBar.Inverse"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:progress="50"

android:background="#ff00ff"

android:paddingTop="4dp" />

通過android:backgroup設置了背景色

⑥ Android開發,圖上灰色波浪線處為什麼是灰的,我檢查過格式了沒有問題,這是怎麼回事

灰色波浪線是IDE的提示,這里指那部分代碼可以省略。
sdk好像在25以上的,findViewById不用強制轉換對應的view

⑦ 有沒有大神 用Android實現仿照Siri聲波曲線

代碼實現

波浪其實是由4條貝塞爾曲線組成的,可以在自定義View的onDraw函數中,用Path.quadTo函數畫出4條曲線。

Path.quadTo(float x1, float y1, float x2, float y2)

其中,x1,y1為控制點的坐標值,x2,y2為終點的坐標值;當控制點的x1位於起點與終點之間時,將畫出正弦曲線,此時y1控制正弦曲線的高度,即效果圖中波浪的高度由y1控制。
實現了曲線繪制和高度控制之後,如何讓曲線像波浪一樣動起來呢?
我的解決方法是在屏幕左邊,即x<0的位置,同樣繪制4條正弦曲線,並且啟動線程讓8條曲線都向右移動,當左邊4條曲線全部移動到屏幕內後,讓這8條曲線復位。如此周期進行。
解析

使用方法

在xml中,

<com.tao.view.SiriView
android:id="@+id/siriView"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_centerInParent="true"/>

在Activity.Java中,

SiriView siriView = (SiriView) findViewById(R.id.siriView);
// 停止波浪曲線
siriView.stop();
// 設置曲線高度,height的取值是0f~1f
siriView.setWaveHeight(0.5f);
// 設置曲線的粗細,width的取值大於0f
siriView.setWaveWidth(5f);
// 設置曲線顏色
siriView.setWaveColor(Color.rgb(39, 188, 136));
// 設置曲線在X軸上的偏移量,默認值為0f
siriView.setWaveOffsetX(0f);
// 設置曲線的數量,默認是4
siriView.setWaveAmount(4);
// 設置曲線的速度,默認是0.1f
siriView.setWaveSpeed(0.1f);

⑧ Android studio中設置等號對齊、取消波浪線等操作

1、點擊 File –> Settings

2、在 Settings 中左邊的搜索框輸入 inspection 選中後再右邊的輸入框中輸入 typo

可以看到下方  typo  選項中的勾號,把它去掉就可以取消掉  typo  的波浪線提示了

⑨ 巨急!!!Android studio。波浪形的地方為什麼錯。怎麼解決。

截圖完整點看看
另外滑鼠放在波浪線那裡也有提示的

熱點內容
php手機社區源碼 發布:2024-04-20 23:13:09 瀏覽:656
介紹高德地圖如何查看電腦配置 發布:2024-04-20 23:03:37 瀏覽:994
演算法加運維 發布:2024-04-20 23:03:30 瀏覽:390
android匹配 發布:2024-04-20 22:58:33 瀏覽:168
string的長度java 發布:2024-04-20 22:46:20 瀏覽:136
網易我的世界監獄風雲的伺服器 發布:2024-04-20 22:35:41 瀏覽:186
linux服務自動重啟 發布:2024-04-20 22:34:54 瀏覽:962
編譯器最後的結果 發布:2024-04-20 22:30:38 瀏覽:821
安裝linuxoracle11g 發布:2024-04-20 22:29:02 瀏覽:533
android設置權重 發布:2024-04-20 22:20:08 瀏覽:725