본문 바로가기

개발/android43

ListView에 EditText를 넣을때 반드시 살펴봐야 할점 설정 페이지를 만들때 ListView로 EditText를 넣고 싶은 유혹에 빠진다 하지만 ListView의 특성상 사실 EditText는 적합하지 않다. ListView는 각각의 row뷰를 재사용하여 메모리를 아끼기 때문에 EditText의 변경값을 일일이 저장해 두었다가 다시 불려줘야 한다. 그리고 이때 진짜 주의할게 하나 있다. 변경 리스너의 중복을 방지하는 것이다. 반드시 재사용 뷰의 예전 리스너를 지워줘야 한다. 안그러면 예전 목록들과 뒤죽박죽 되버린다. 이해를 돕기 위해 리스너를 지우지 않았을때와 지웠을때도 비교해 보았다. public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstan.. 2017. 9. 11.
부등호 없는 부등식 소스를 짜보자 반복적으로 또는 사용자 임의로 부등식 비교를 할때 일일이 부등호를 넣어야 하는 불편이 있다. 예를 들어 int a = 1, b = 5; String sign = "")) { return a > b; } else if (sign.equels(">=")) { return a >= b; } 역시 소스가 깔끔하지 않다. 간단한 수식을 이용해 다음과 같이 해보자. //부등식 객체 클래스 public static class Compare { private int mA, mB; private boolean mRight, mEquel; public Compare(int a, int b, boolean right, boolean equel) { mA = a; mB = b; mRight = right; mEquel = e.. 2017. 6. 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.
TimePicker, DatePicker, NumberPicker의 폰트 바꾸기 시간을 쉽게 선택할 수 있는 TimePicker, 날짜를 쉽게 선택할 수 있는 DatePicker 이것들은 NumberPicker로 이루어진 UI이다. 그래서 이 Picker들의 폰트를 바꾸기 위해서는 NumberPicker의 구조를 알아야 한다. NumberPicker는 현재 선택된 숫자를 보여주는 TextView와 그 주위의 숫자를 스크롤하며 보여주는 휠 뷰로 구성된다. (스타일을 Theme.Holo.Light 로 적용했을 경우) 즉, 폰트를 바꿔줄때 이 두가지를 모두 바꿔줘야 한다는 의미다. public void setTypeface(NumberPicker picker, Typeface typeface) { //주위의 숫자들을 보여주는 휠 뷰 try { //클래스의 휠 Paint 객체를 꺼내 폰트를.. 2016. 7. 18.
카메라 위에 스킨을 넣어 찍어보자~ 카메라 사진 위에 그림이나 글자를 넣어 찍고 싶다면?? 의외로 간단하다... 아래를 보시라~ 사진을 찍을려면 먼저 카메라를 연동해야 한다. 이부분은 비록 복잡해 보이지만 어차피 안드로이드 샘플 예제에 다 나오는 내용이다. 그런데 룰리팝 이후로 카메라 연동방법이 바뀌는 바람에 다시 삽질좀 하며 작성했다ㅎㅎ 이글의 주제는 카메라 연동이 아니니 참고만... 설명도 생략... private CameraManager mCameraManager; private CameraDevice mCameraDevice; private Camera mCamera; private Size mPreviewSize; private CaptureRequest.Builder mPreviewBuilder, mPictureBuilder; .. 2016. 5. 30.
초간단 꺽은선 그래프 만들기 그래프는 텍스트로 표현하기 복잡한 정보를 한결 보기좋게 만드는 매력이 있다. 그래서 간편함의 상징인 모바일에서는 빠질수 없는 요소이다. 특히 많이 쓰이는 것이 막대 그래프와 꺽은선 그래프 일것이다. 그런데 꺽은선 그래프는 선이 하나로 이어져 있기 때문에 만드는데 애를 먹을때가 있다 그때를 대비해 초간단 꺽은선 그래프뷰를 만들어 놓자~ 구미에 맞게 확장해서 쓰면 매우 유용하다 public class GraphView extends View { private ShapeDrawable mLineShape; private Paint mPointPaint; private float mThickness; private int[] mPoints, mPointX, mPointY; private int mPointSiz.. 2016. 4. 25.
버튼의 Selector 이미지를 간절히 가져오고 싶다면? 보통 Selector를 xml로 아래와 같이 만들어 놓는다. 그리고 버튼 background에 적용한다. 별로~ 그럴일은 없지만 만약 이 selector의 android:drawable 이미지를 자바 코드상으로 불려오고 싶다면?? private Drawable[] getPressImages(View v) { //Selector 이미지를 StateListDrawable 객체로 불러옴 StateListDrawable statedrawable = (StateListDrawable)v.getBackground(); if(statedrawable != null) { try { //Veiw의 현재 이미지 상태를 배열에 가져옴 int[] currentstate = v.getDrawableState(); //이미지를 .. 2016. 3. 28.
일반뷰를 맵뷰처럼 밀어서 스크롤 시키기 맵뷰나 스크롤뷰를 손가락으로 살짝 밀면 미끄러지듯이 스크롤이 되다가 서시히 멈춘다 이것을 일반뷰에서도 가능하게 해보자~ 기본적인 개념은 이렇다 손가락이 닿았을때 좌표와 시간을 저장하고 손가락이 떨어졌을때 저장된 좌표와 현재 좌표의 차를 계산해 거리와 방향을 구한다 그리고 시간의 차도 계산해 거리와 나눠 속도를 구한다 이것을 스레드로 속도를 서서히 줄이면서 계속 스크롤 해주면 된다. 소스로 보면 더 잘 이해될것이다. private View mView; private long mTime; private ScrollThread mThread; @Override public boolean onTouchEvent(MotionEvent event) { float touchx = event.getX(); float .. 2016. 2. 29.