본문 바로가기

안드로이드19

View를 서서히 나오고 사라지게 하는 간단 방법 Activity를 전환할때 서서히 나오고 사라지는 등의 애니메이션을 넣을 수 있다 당연히 Activity가 아닌 일반 View 도 가능하다 하지만 View 에서는 한가지 주의할 점이 있다. Activity는 전환 애니메이션을 마치면 자동으로 생성되거나 없어지지만 View는 그렇지 않다는 것이다. 즉, 애니메이션이 시작 또는 끝날때 View를 부모뷰에서 빼고 넣거나 보이게 또는 보이지 않게 처리 해주어야 한다. 애니메이션을 불러와 시작하는 코드 //나오기 fun startAnimationWithShow(context: Context, view: View, id: Int) { view.visibility = View.VISIBLE //애니메이션 전에 뷰를 보이게 한다 view.startAnimation(An.. 2022. 3. 13.
seekbar로 만든 진행바에 터치가 안되게 하기 진행바를 seekbar로 만드는 경우, 터치 했을때 바가 움직여 버린다. 다음과 같이 간단히 막아버리자 class TouchlessSeekBar: SeekBar { private var seek: Int constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet) : super(context, attrs) constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) init { seek = 0 thumb = ColorDrawable(Color.TRANSPARENT) //터치아.. 2020. 3. 24.
날짜 텍스트에 일수를 더해보자 우리는 종종 string형 날짜에 int형 일수를 더하는 작업을 하게 된다. 이때, 다음과 같이 간단한 함수를 하나 만들어 사용하자 코틀린으로 작성했다. fun afterDate(date: String, day: Int, pattern: String = "yyyy-MM-dd"): String { val format = SimpleDateFormat(pattern, Locale.getDefault()) val calendar = Calendar.getInstance() format.parse(date)?.let { calendar.time = it } calendar.add(Calendar.DAY_OF_YEAR, day) return format.format(calendar.time) } date에 날짜 .. 2020. 1. 31.
FragmentPaper에서 ListView가 매번 초기화되지 않도록 하기 대부분의 앱은 탭과 리스트로 구성된다. 많은 정보를 간편하면서도 체계적으로 보여줄수 있기 때문이다. Android에서 이러한 구조는 보통 FragmentPaper에 ListView를 넣어 구현한다. FragmentPaper는 메모리 관리를 위해 사용자가 보고 있는 페이지과 양옆의 페이지만 유지하고 나머지는 죽이는데 내 경험상 완전히 죽이는것이 아니라 Fragment의 생명주기만 끝내는것 같다. 결과적으로, 페이지를 옮길때마다 Fragment가 초기화되어 그 안의 ListView 내용도 다 지워진다. 이를 방지하는 방법이 따로 있을지도 모르겠지만 나는 다음과 같이 onCreateView()에 몇줄을 코딩해 해결하곤 한다. Fragment의 생명주기는 다시 시작되지만 Class 자체의 객체변수들은 그대로 남.. 2019. 5. 23.
Dialog를 닫았는데 background로 나갔다 들어오니 다시 열린다??? 안드로이드에서 대화상자를 띄울때 DialogFragment를 사용한다. 그런데 사용후 닫았는데도 화면을 끄거나 홈버튼을 누르거나 다른 앱을 잠시 사용한후 들어오면... 닫혔던 DialogFragment 놈이 되살아나 다시 뜨는 경우가 있다. 알고보니 dismiss 리스너를 등록하면 그런다. 즉, setDismissListener에 리스너를 넣었다면 반드시 종료할때 dismiss()를 호출해주어야 한다. 그러지않고 back 버튼이나 바깥화면 터치로 닫으면 나중에 다시 떠버린다. 당황하지 말고 다음과 같이 하자... dialog.setOnDismissListener { //리스너 내용 } dialog.setOnKeyListener { dialogInterface, i, keyEvent -> if (keyEv.. 2019. 3. 13.
EditText에 자동으로 단위 콤마 넣기 NumberFormat 을 이용하면 숫자에 단위 콤마를 쉽게 찍을수 있다. 하지만 이를 EditText에 적용할려고 하면 한가지 문제가 생긴다. 입력할때마다 콤마가 찍혀야 하는데... addTextChangedListener에서 NumberFormat으로 콤마를 찍으면 당연히 텍스트가 변경되므로 다시 리스너가 호출된다. 즉, 호출이 무한 반복되면서 앱이 멈추게 된다. 그래서 살짝 꼼수를 부려봤다. EditText 밑에 같은 크기의 TextView를 깔고 여기에 콤마를 찍은 텍스트를 대신 써주고, 후에 EditText를 동기화 하는 것이다. 물론, EditText는 투명하게 설정해 안보이게 한다. 사실 임시 방편으로 만든것인데.. 생각보다 잘 작동해 계속 쓰고 있다 ㅎㅎㅎ 소스는 다음과 같다. 요즘 뜨고 .. 2019. 1. 17.
sqlite의 time이 자정을 인식 못할 경우, 간단한 꼼수 해결법 안드로이드의 sqlite 데이터베이스를 사용하는 도중 이상한 점을 하나 발견했다. time 데이터타입에서 00시 또는 24시, 즉 자정일때 time() 함수가 먹히질 않는다는 점이다. 예를 들면, (time 데이터타입의 field1 시각 + int 데이터타입의 field2 초) > 특정시각 을 비교할때 SELECT * FROM table1 WHERE time(field1, field2 ||' seconds') > 23:59:30 와 같이 사용한다. 하지만 이때, field1이 23:59:00 이고 field2가 60초 이상이면 자정이 넘어가면서 SELECT 결과가 항상 아무것도 안나오게 된다. field1이 24:00:00 이상이어도 마찬가지다. 이걸 해결하기 위해 만방으로 살펴봤지만... 역시 코딩은 .. 2018. 9. 27.
간단한 코딩으로 큰따음표("")로 묶인 CSV 파일 보기 CSV란 콤마(,)로 구분한 일련의 데이터들을 말한다. 예를 들면 아래와 같다. 고양이,강아지,곰,상어,토끼 100,20,55,177,83 이런 형식은 서로 호환 되지 않는 프로그램끼리 데이터들을 주고 받을때 유용하게 쓰인다. 또한 매우 간단하기 때문에 부담도 없다. 하지만 흔한 문제점 하나가 있다. 콤마가 있는 데이터가 있을 경우다. 56 10,000 1,500 300 890 2,360,050 74 금액을 표시할때 위와 같이 종종 단위 콤마를 쓰는데 이것을 CSV로 표현하면, 56,10,000,1,500,300,890,2,360,050,74 가 된다. 의도와는 다르게 데이터가 56 10 100 1 500 300 890 2 360 050 74 로 나누어져 버렸다 그래서 콤마가 있는 데이터를 큰따음표("".. 2016. 11. 14.
막대 그래프의 처음은 이렇게 가장 기본이 되는 그래프인 막대 그래프를 만들어 보자~ 위와 같이 막대와 그 수치를 넣을 것이다 예전에 올렸던 꺽은선 그래프를 살짝 변경해서 코딩했다. private Paint mLinePaint, mTextPaint; private float mTextGap; private int[] mPoints, mPointX, mPointY; private int mUnit, mOrigin, mDivide; public GraphView(Context context, AttributeSet attrs) { super(context, attrs); setTypes(context, attrs); } //그래프 옵션을 받는다 private void setTypes(Context context, AttributeSet .. 2016. 10. 24.
재귀 함수의 완벽한 이해 재귀 함수란 자기 자신을 다시 호출하는 함수를 말한다. 하지만 이러한 개념을 알고 있어도 직접 구현할려고 하면 헷갈린다. 특히, 분기를 위한 반복문이 함수내에 들어간다면 더더욱 그렇다. 거리 계산 다이어그램을 예로 해서 살펴보자 위 다이어그램의 숫자들은 각 점끼리의 거리이다. 즉, 총 거리는 숫자들을 모두 더한 13이고, D까지는 3 + 2 + 4 = 9가 된다. 재귀 함수로 코드화 해보자 private static int NAME_A = 0; private static int NAME_B = 1; private static int NAME_C = 2; private static int NAME_D = 3; private static int NAME_E = 4; private static int NAME.. 2016. 9. 26.