>

javacode

Saturday, April 9, 2016

SeekBar刻度 與 Runnable 應用

SeekBar 刻度的實現與Runnable的應用






首先先瞧瞧SeekBar的說明



Android裡Seekbar其實是ProgressBar的延伸讓設計者可以運用觸控事件(Touch Event) 可拖動的拇指左右方向(Draggable Thumb/left right arrow keys)並改變他的值

先畫畫 類別圖

稍稍瞭解後便開始創造SeekBar吧

在layout裡 宣告我們需要的SeekBar 在xml裡面我們可以直接宣告seekbar的最大值是多少或者是動態加載

xml裡加載只需要多加上android:max=”100”(值可以自由設定)

<SeekBar
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_above="@+id/seekbar_text"
  android:id="@+id/seekbar"
  />
<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/seekbar_text"
  android:text="0"
  android:layout_below="@id/mlinear2"
  android:layout_centerHorizontal="true"
  android:textSize="15dp"/>

這個TextView用來顯示拖動刻度的值是多少

在MainActivity中

private SeekBar seekBar;
private int seekProgress;
先初始化我們所需要的物件
運用setOnSeekBarChangeListener() 這個Callback去通知Progress Level 已經被使用者改過
再用onProgressChanged()將被使用者改過的
seekProgress = progress 取得變更的值


由於最開始設定了 SeekBar的最大值為20(seekbar.setMax(20))  表示刻度為1 可以拖動到最大值20為止

progress*50 讓我的最大值的數字顯示為1000 每一刻度為50
fromUser 這boolean是判斷 是不是被使用者拖動  是要做什麼 不是要做什麼完全可以由設計者掌控


在這段程式碼當中 取得了progress改變的值 並將它存到seekProgress裡面
接下來就直接運用seekProgress套用到Runnable postDelayed()裡
只要progress的值 改變 Runnable的Delayed也會跟著改變
效果圖


Friday, April 8, 2016

Animation亂數播放圖片

小小的抱怨一下 為何都會自動翻譯 吃掉我的英文==排版會自己亂排...使我非常頭痛萬分

AnimationDrawable
這個播放這個播放圖片是順序性的可正可逆在java的娃娃那張圖上是順序播放


但如果resouce都寫在XML裡面想將resouce的資源拿出來亂數播放該如何做到呢

下面的數字標誌將會是亂數呈現 

在value裡的string先寫好我們會用到的圖檔
< array name= "number_array" > 
    < item >@drawable/n1</ item > 
    < item >@drawable/n2</ item > 
    < item >@drawable/n3</ item > 
    < item >@drawable/n4</ item > 
    < item >@drawable/n5</ item > 
    < item >@drawable/n6</ item > 
    < item >@drawable/n7</ item > 
    < item >@drawable/n8</ item > 
    < item >@drawable/n9</ item > 
</ array >

在程式碼當中
我們需要將這array裡面的資料提取出來






再來就是需要一些初始化的設定


number_logo是TypedArray的reference
mview_logo先設定一張圖片

當資源有了
這時候就是要如何實現亂數播放

會需要的是個Runnable和Handler來做到持續更新UI的事情

postDelayed(this,seekProgress) 
seekProgress可以替換成毫秒...

在這個Runnable裡 做的事情就是利用Math.random()*number_count 達到亂數選號碼的效果

最後只需要在方法裡啟用就可以了



Wednesday, April 6, 2016

AnimationDrawable

  學習動畫的應用和其他功能的結合
 這是個很陽春的佈局java的娃娃是利用AnimationDrawable呈現畫面會一直跑的效果
分別用三個按鈕控制這個圖片

善用UML建構類別圖也幫助自己學習
 

Java的娃娃的佈局:
最外層是個RelativeLayout

使用好萊塢模式設置的onClick

善用XML來做圖片管理而不是直接寫死在程式裡面  以後方便維護


首先

drawable右鍵新增一個 resouce file

將要用到的連續圖片寫入新增出來的文件裡面



這裡用<動畫列表>去裝你的圖片持續時間是執行的時間以毫秒計算

再來就是程式碼的編輯了
將要使用到的物件先宣告出來


AnimationDrawable將會執行幀一幀像電影一樣將圖片一張一張播放出來




設定imageview的背景來源指向drawable新增的resouce file frame_animation

養成好習慣 啟動動作前 先確定是否已經在執行 


這是R.anim.translate裡面的屬性設置


效果是達到水平平移和同時縮小的效果



   效果如圖 

Animation動畫特效







Step1:   
Step2: 一般程式的寫法 Alpha(淡出) 從不透明 淡出 到完全透明(這是個漸變)
Step3:Rotate(旋轉)

首先先認識 RELATIVE TO SELF

以自己左上角為坐標(0.0)

RELATIVE TO PARENT 以父(layout)左上角為座標(0,0)



Step4:Scale(縮放)
Step5:Translate(位移)

Tween Animations的通用屬性
  1. setDuration(long durationMills) 設置動畫持續時間(單位:毫秒)
  2. setFillAfter(boolean fillAfter) 如果fillAfter為true,則動畫執行後,              物件將回到動畫執行結束的狀態(簡單來說他就不會恢復到一開始的狀態)
  3. setFillBefore(boolean fillBefore)如果fillBefore為true,則動畫執行後,         物件將回到動畫執行之前的狀態
  4. setStartOffset(long startOffset) 設置動畫執行之前的等待時間
  5. setRepeatCount(int repeatCount)設置動畫執行的次數

實現XML來控制動畫定義的效果 做到方便維護
你將會發現上面......有點....ㄔㄨㄣˇ

Step1:res 右鍵 新增一個 android resource資料夾 選擇 anim




Step:2 點選 新增的anim檔案  右鍵 新增四個檔案 alpha,scale,translate,rotate
Step3-1 : alpha.xml
Step 3-2 : rotate.xml
Step3-3: scale.xml
Step3-4 : translate.xml
Step 4 :瞧瞧程式碼
AniamtionUtils是Animation的子類別 所以當父要使用子類是不需要new
要new的會是實例方法..
loadAnimation是AniamtionUtils的靜態方法...

使用XML做維護時 想不到程式碼 變成短短的兩行...

眼尖的同學會發現有個沒介紹到的咚咚

Interpolator 他在xml檔有出現 也在程式碼中 有代表它的屬性質new AniamtionSet(true);


想深入了解的 請點選下面的url 大神的介紹