본문 바로가기

BLE/안드로이드 앱

[Noise Detector] 그래픽 모듈 (1) : WaveDataView

시스템 흐름

system diagram views animation

 

설명

WaveDataView는 WaveData 모듈이 외부 시스템과 통신하는 클래스이자 4개의 핵심 구성요소인 WaveBars, CriticalLine, EdgeLine, Warning이 inflation되는 FrameLayout입니다.

 

WaveDataView 인스턴스는 생성자로 생성되지 않고 getView() 메소드를 통해 얻어야 하며, 하나의 프로그램에 하나의 인스턴스만 존재할 수 있습니다.

getView() 메소드에 입력된 파라미터는 다시 4개의 구성요소에 적절히 분배되어 각 구성요소를 생성하고 자신과 연결시킨 후 그것을 반환합니다.

위 방법은 XML을 이용한 정적 방법입니다. 동적 코드로 작성해 보려고 했는데 외부 FrameLayout에 다시 FrameLayout을 상속하는 WaveDataView를 addView()를 사용하여 연결시키면 하위 뷰들(WaveBarsCriticalLineEdgeLineWarning)이 보이지 않더군요. 물론 하위 뷰들을 외부 FrameLayout에 직접 inflation할 수 있겠지만, 하나로 묶어 관리하기는 정적 방법이 더 편할 것 같아 동적 방법은 따로 구현하지도 않았습니다. 외부 레이아웃에 하위 뷰들이 연결된 레이아웃을 다시 연결하는 방법을 아시는 분은 좀 알려주세요.

 

외부 시스템은 WaveDataView가 제공하는 API를 통해 각 구성요소를 제어할 수 있습니다.

 

API

 

요약

어플리케이션에 존재할 수 있는 단 하나의 WaveDataView 객체를 반환하는 싱글톤 메소드 입니다.

WaveData가 보여주는 그래픽에 대한 모든 설정이 파라미터로 입력됩니다.

 

파라미터

// 공통 설정

int backColor                 : 배경색을 설정한다.

float extraRateHeight_hor     : 가로 모드에서 외곽 가로 라인이 시작하는 비율을 설정한다.

float extraRateWidth_hor      : 가로 모드에서 외곽 세로 라인이 위치하는 비율을 설정한다.

float extraRateHeight_ver     : 세로 모드에서 외곽 가로 라인이 시작하는 비율을 설정한다.

float extraRateWidth_ver      : 세로 모드에서 외곽 세로 라인이 위치하는 비율을 설정한다.

float maxValue                : 수신될 수 있는 최대값을 설정한다.

boolean debugMode,            : 구현중

 

// 외곽 라인 설정

int lineWidth                 : 외곽 라인의 두께를 설정한다.

int lineColor                 : 외곽 라인의 두께를 설정한다.

String unit                   : 외곽 라인 좌측 상단에 표시되며 세로축의 단위를 나타낸다. 2문자를 초과할 수 없다.

float edgeMaxValue            : 외곽 라인 세로축에 표시되는 최대값이다. 이 값과 3/4, 1/2, 1/4 값들이이 외곽 라인 세로축에 그려진다.

boolean isFraction            : 소수점까지 나타낼 지를 설정한다.

int numOfFraction             : 소수 몇째자리까지 나타낼 지를 설정한다.

int edgeFontSize_ver          : 가로 모드에서 외곽 라인 세로축에 그려지는 문자의 크기를 설정한다.

int edgeFontSize_hor          : 세로 모드에서 외곽 라인 세로축에 그려지는 문자의 크기를 설정한다.

int edgeFontColor             : 외곽 라인 세로축에 그려지는 문자의 색을 설정한다.

 

// 경고 라인 설정

int criColor                  : 경고 라인의 색을 설정한다.

int criWidth                  : 경고 라인의 두께를 설정한다.

float criMinValue             : 경고 라인의 최소값을 설정한다. maxValue 파라미터 기준이며 외곽 라인 세로 길이의 criMinValue÷maxValue 비율까지만 내려갈 수 있다.

 

// 웨이브 바 설정

int barColor                  : 막대의 색을 설정한다.

boolean gradient              : 막대의 그라디언트 유무를 설정한다.

int gradientColor             : 그라디언트 사용시 그라디언트 색을 설정한다.

float intervalRate            : 막대의 가로 길이는 (외곽 라인 가로 길이÷입력된 데이터 수)인데 이 길이 중, 빈 공간의 비율을 설정한다. 이 공간은 막대의 가로길이를 intervalRate로 나눈만큼의 크기를 갖는다.

long period                   : 데이터가 수신되는 주기를 설정한다.

long oneFramePeriod           : 데이터가 움직일 때 한 프레임당 주기를 설정한다. 즉, 데이터를 에니메이션화할 때의 전체 프레임 수는 (period÷oneFramePeriod)이다.

boolean autoAdjustPeriod      : 버퍼가 발생할 경우 데이터가 수신되는 주기를 줄여서 버퍼를 비울지 설정한다.

 

// 경고 설정

int warnColor                 : 경고 색을 설정한다.

long warnTime                 : 경고 시간을 설정한다.

int twinkNum)                 : 깜빡임 횟수를 설정한다.

 

public boolean animateBars(float[] values)

public boolean animateBars(byte[] values)

public boolean animateBars(float[] values, float maxValue)

요약

외부에서 배열로 된 값을 받으면 ArrayBundle로 포장하여 WaveData에 전달한다.

파라미터

values        : WaveBars에 그려질 막대의 값으로, 외곽 세로축 길이×(values[i]÷maxValue)만큼 막대가 올라갔다 내려간다. 

maxValue      : 위 두개의 메소드는 values 배열을 루푸에 넣어 최대값을 구하는데, 이것을 외부에서 스래드로 처리하여 넘겨줄 때 사용된다.

 

public void clearData()

요약

WaveBars의 버퍼를 비우고 배경색으로 클리어한다.

 

public void ignoreReceive(boolean ignore)

요약

수신된 배열을 WaveData에 전송하는 것을 일시 정지한다.

 

public boolean setVibrator(boolean onOff)

요약

수신된 값의 최대값이 경고 라인 값을 초과할 때 진동을 발생시킬지 설정한다.

파라미터

onOff : true일 경우 진동을 발생시킨다.

 

public boolean toggleVibrator()

요약

현재 진동 상태를 토글한다.

 

public boolean getVibrator()

요약

외부 시스템에서 현재 진동 상태를 얻어올 때 사용된다.

 

public float getCLValue() 

요약

현재 경고 라인의 값을 얻어온다.

 

public void setCLValueListener(CriticalLine.ExternalCLValueListener listener)

요약

외부에서 경고 라인이 갱신될 때 그 값을 실시간으로 받아오기위해 CriticalLine.ExternalCLValueListener의 구현 객체로 등록될 때 사용된다.