검색결과 리스트
Android에 해당되는 글 3건
- 2017.05.02 날짜 정규화
- 2017.04.28 뷰 스와이프 영역 겹침 문제
- 2017.04.28 GPS 설정 액티비티 호출
글
날짜 정규화
MPAndroidChart 차트 라이브러리를 사용하면서 일별 데이터를 출력해야했는데
데이터베이스에 System.currentTimeMillis()로 얻어지는 UTC(세계 협정시)를 그대로 저장했기에
x축으로 그대로 사용할 수 없었고 간격이 1일이 되는 날짜로 정규화할 필요성이 있었다
(별도의 정규화가 필요한 이유는 20170517 과 같은 단순히 년/월/일을 직접 조합한 값을 사용하게 되면 년과 월의 경계에서 숫자가 크게 변하게 되어 이 값을 일정한 간격으로 증가해야하는 차트의 x축 값으로 사용하기에 적절하지 않기 때문이다)
처음엔 당연한듯 하루의 밀리초에 해당되는 (1000 * 60 * 60 * 24)로 나누어 정규화했지만
오차가 발생하였고 웹서칭으로 알아보니 지역별 TimeZone을 고려하지 않았서 생긴 문제였다
1 2 3 4 5 | long t1 = 1493548835119; // 2017-04-30 19:40:35.119 long t2 = 1493548835119; // 2017-05-01 00:39:56.124 System.printf("" + (t1 / (1000 * 60 * 60 * 24)); // 17286 = 2017-04-30 System.printf("" + (t2 / (1000 * 60 * 60 * 24)); // 17286 = 2017-04-30 | cs |
결론적으로 한국은 UTC/GMT +9 이고
하루의 시간으로 나누어 시간 부분을 잘라내기전에 +9시간을 더해주어야 한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | long utcToDates(long timeMillis) { // utc를 입력 받아서 날수를 계산 // TimeZone을 고려하지 않고 그냥 하루의 시간으로 나누게 되면 지역별 시간차에 의해 최대 1일의 오차가 발생 return (timeMillis + Calendar.getInstance().get(Calendar.ZONE_OFFSET)) / (1000 * 60 * 60 * 24); } long datesToUtc(long dates) { return dates * (1000 * 60 * 60 * 24); } public String getFormattedDate(long value) { String strDate; Date mDate = new Date(); Canendar mCalendar = Calendar.getInstance(); mDate.setTime(datesToUtc(value)); mCalendar.setTime(mDate); strDate = "" + mCalendar.get(Calendar.YEAR) + "-" + (mCalendar.get(Calendar.MONTH) + 1) + "-" + mCalendar.get(Calendar.DATE); return strDate; } | cs |
'Android' 카테고리의 다른 글
뷰 스와이프 영역 겹침 문제 (0) | 2017.04.28 |
---|---|
GPS 설정 액티비티 호출 (0) | 2017.04.28 |
글
뷰 스와이프 영역 겹침 문제
적절한 제목인지는 잘 모르겠습니다
ViewPager 내부에 네이버 맵 프래그먼트가 속해있는 구조에서
네이버 맵 영역에서 좌우로 패닝(손가락을 때지 않고 움직임)시에
동작이 네이버 맵에 전달되지 않고 ViewPager에 의해 가로채어져 좌우로 페이지가 넘어가는 문제가 있었습니다
이렇게 동작 영역이 겹칠때에는 어느 한쪽은 마땅히 포기해야하는것이 자연스럽겠죠?
웹서칭을 해보았으나 대부분 ViewPager 클래스를 상속 받아서 기능을 무력화 시키는 코드가 많이 보였습니다
단지 이것을 위해 상속 받아야 한다면 파리를 잡기 위해 대포를 쏘는 격 같은데요
터치 이벤트 관련해서 여러 자료를 읽은 후에 다음과 같이 해결할 수 있었습니다
1 2 3 4 5 | @Override public boolean dispatchTouchEvent(MotionEvent ev) { viewPager.requestDisallowInterceptTouchEvent(true); return super.dispatchTouchEvent(ev); } | cs |
'Android' 카테고리의 다른 글
날짜 정규화 (0) | 2017.05.02 |
---|---|
GPS 설정 액티비티 호출 (0) | 2017.04.28 |
글
GPS 설정 액티비티 호출
1 | <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> | cs |
1 2 3 4 5 | LocationManager locMan = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE); if (locMan.isProviderEnabled("gps") == false) { Toast.makeText(getContext(), "GPS 기능을 필요로 합니다.", Toast.LENGTH_LONG).show(); startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); } | cs |
'Android' 카테고리의 다른 글
날짜 정규화 (0) | 2017.05.02 |
---|---|
뷰 스와이프 영역 겹침 문제 (0) | 2017.04.28 |