首先來看看效果圖吧,可以根據需要設定出很炫的效果
android中經常會用到時間軸,那麼如何實現時間軸呢?首先我們了解時間軸的構成
(1)時間球
(2)直線
(3)位置
下面介紹乙個時間軸實現的開源**:
把這幾個問題解決再掌握基本的繪製過程就可以實現時間軸了。下面先來看**。
(1)定義屬性,使用者可以自定義的屬性值
(2)**實現<?xml version="1.0" encoding="utf-8"?>
上述**200行左右,核心的**也非常少,在控制項的構造方法裡面,把使用者自定義的值獲取到,如果沒有定義,使用預設值。在onmeasure裡面計算好寬高,以及時間球,直線的位置,然後在控制項的ondraw方法中把它繪製好。基本邏輯比較簡單import android.content.context;
import android.content.res.typedarray;
import android.graphics.canvas;
import android.graphics.rect;
import android.graphics.drawable.drawable;
import android.util.attributeset;
import android.view.view;
/** * 時間軸控制項
*/public class timelineview extends view
private void init(attributeset attrs)
if(mbottomtimeball == null)
if(mstartline == null)
if(mendline == null)
}@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec)
/*** 初始化時間軸控制項的位置大小等
* */
private void inittimelineview() else
int centerx = mbounds.centerx();
int lineleft = centerx - (mlinewidth >> 1);
if(mistoplinevisible && mstartline!=null)
if(mendline != null)
if(misbottomballvisible && mbottomtimeball != null)
}@override
protected void ondraw(canvas canvas)
if(mistoplinevisible && mstartline != null)
if(mendline != null)
if(misbottomballvisible && mbottomtimeball != null)
}/**
* 設定頂部時間球
* */
public void settoptimeballdrawable(drawable ball)
/*** 設定底部時間球
* */
public void setbottomtimedrawable(drawable ball)
/*** 時間球大小
* */
public void settimeballsize(int ballsize)
/*** 時間球中心位於頂部的距離
* */
public void setballmargintop(int top)
/*** 時間軸寬度
* */
public void setlinewidth(int width)
/*** 頂部時間線是否可見
* */
public void settoplinevisible(boolean visible)
/*** 底部時間球是否可見
* */
public void setbottomballvisible(boolean visible)
}
(3)使用,把它加到xml布局當中,設定一些屬性值,也可以在**中重新設定一些值
android:id="@+id/time_line"
android:layout_width="8dip"
android:layout_height="match_parent"
**重新設定屬性,具體**可以檢視原始碼裡面的demo
注意:timelineview timelineview = (timelineview) convertview.findviewbyid(r.id.time_line);
textview.settext(mdata.get(position));
timelineview.settoplinevisible(false);
timelineview.setbottomballvisible(false);
if(position != 0)
if(getcount() - 1 == position)
switch (position % 3)
case 1 :
case 2 :
}/*呼叫下面強制繪製,否則會出現顯示錯位問題*/
timelineview.invalidate();
在listview中使用的時候,由於adapter使用了快取,因此如果時間軸控制項顯示不一致的情況下,使用快取會導致顯示錯位問題,這時可以呼叫invalidate強制繪製即可。具體的實現,在
有demo可以看到效果。
Android時間軸控制項 WheelView
在做時間軸或者某些型別的選擇時,有時候設計師會給我們出類似下面的效果 因此,我們就需要重新自定義scrollview,也就是移動端常用的時間軸控制項 wheelview 實現方式直接上 public class wheelview extends scrollview private context...
自繪時間軸控制項
控制項 標頭檔案 pragma once ctimeaxisctrl class ctimeaxisctrl public cwnd private colorref m clrbackground,m clrtext,m clrgrid,m clrleftarea cfont m fontymd,...
mysql 時間軸 使用MySQL計算時間軸的變化
我是mysql的新手,我需要你的幫助.我有一張包含類似資料的 robotposx robotposy robotposdir robotshortestpath 0.1 0.2 15 1456 0.2 0.3 30 1456 0.54 0.67 15 1456 0.68 0.98 22 1234 0...