[Android]Table Scroll(Vertical, Horizontal 스크롤 동시에 하기)

Posted by Find my true self Fimtrus
2012.04.20 10:08 Programming/Android

안드로이드에서 엑셀 처럼 스크롤을 하기 위해서는 기본제공하는 ScrollView에서는 불가능하다.

그래서 하게된 편법.

Touch Event를 받아서 제어하는 방법이 있다.

위의 화면은 아래와 같이 구성되어 있다.

  • ScrollView
    • TableLayout
  • Horizontal ScrollView
    • TableLayout
  • ScrollView 
    • Horizontal ScrollVIew
      • TableLayou

총 4개의 스크롤 뷰로 구성되어 있는데 
사용자가 화면을 Touch 한 좌표를 구해서 움직인 만큼 스크롤뷰도 함께 움직여 주는 것이 핵심이다.

순서는 아래와 같다.
  1. XML 또는 동적으로 스크롤뷰 4개 만들기
  2. Touch Event Listener 만들기
  3. Touch Event를 받아서 각각의 ScrollView에 좌표 전달해주기

- OnTouch
	
public boolean onTouch(View v, MotionEvent event) {
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			mCurrentX = (int) event.getRawX();
			mCurrentY = (int) event.getRawY();
			break;
		case MotionEvent.ACTION_MOVE:
			int movingX = (int) event.getRawX();
			int movingY = (int) event.getRawY();
			scrollBy(mCurrentX - movingX, mCurrentY - movingY);
			mCurrentX = movingX;
			mCurrentY = movingY;
			break;
		case MotionEvent.ACTION_UP:
			break;
		default:
			mCurrentX = (int) event.getRawX();
			mCurrentY = (int) event.getRawY();
			break;
		}
		mCurrentX = (int) event.getRawX();
		mCurrentY = (int) event.getRawY();
		return true;
	}



scroll.java



이 댓글을 비밀 댓글로
    • 2014.08.12 02:17
    비밀댓글입니다

[Manifest]android SD카드에 어플 설치하기

Posted by Find my true self Fimtrus
2012.03.21 13:29 Programming/Android
android manifest 파일에 아래와 같이 "preferExternal" 을 추가해주면 된다.


<
manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal"
   
 ... >

 내장 메모리  internalOnly
 외장 메모리  preferExternal
 사용자 옵션  auto

이 댓글을 비밀 댓글로

cryptandroid

Posted by Find my true self Fimtrus
2011.11.27 18:06 Programming/Android
apk file

-1

이 댓글을 비밀 댓글로

안드로이드 ImageView Scale 설정

Posted by Find my true self Fimtrus
2011.08.25 11:53 Programming/Android

http://mainia.tistory.com/473
이 댓글을 비밀 댓글로

TextView에서 터치된 영역의 Offset 가져오기

Posted by Find my true self Fimtrus
2011.08.24 09:16 Programming/Android
Ebook 관련 API들을 만들고 테스트하는 도중,
Select에서의 블록이나 하이라이트와 관련해서
터치된 영역이 문자열의 어느 부분인지 구하는 로직이 필요했습니다.

물론 Paint를 써서 대충 계산하면 어느정도 맞출 수는 있지만
문자 사이즈에 의해 정해져있는 세로와는 달리 가로는 폰트마다
가변적인 사이즈를 가지고 있기 때문에 폰트마다
일일히 계산해주지 않으면 안 되는 상황에 봉착했습니다.
(예전에는 폰트 매트릭스를 읽어와 일일히 계산해주었다는군요)

그러다가 웹서핑 도중 유용한 녀석을 발견해서 정리해놓습니다.
아직도 모르는 게 너무도 많아서 문제군요

public int getOffset(TextVIew text, MotionEvent event) {
  // 터치 좌표를 int형으로 바꿔준다.
  int positionX = (int) event.getX();
  int positionY = (int) event.getY();


  // TextView의 Padding값을 빼준다. (text 영역안에서 계산하기 위함)
    positionX -= text.getTotalPaddingLeft();
    positionY -= text.getTotalPaddingTop();


// TextView의 레이아웃을 가져온다.
    Layout layout = text.getLayout();


// Y좌표를 이용, 현재 몇번째 Line인지 계산한다.
    int line = layout.getLineForVertical(positionY);


 // 라인과 X좌료를 이용, 현재 터치한 영역의 Offset을 구한다.
    int off = layout.getOffsetForHorizontal(line, positionX);


    // 계산된 결과를 리턴
    return off;
}


출처 : http://chunic.blogspot.com/2011/07/textview-offset.html
이 댓글을 비밀 댓글로

What is android??

Posted by Find my true self Fimtrus
2011.07.05 09:52 Programming/Android

안드로이드는 모바일 디바이스를 위한 소프트웨어Stack 입니다.
안드로이드 SDK를 통해 Java 언어를 이용하여 Application을 개발합니다.

Android Architecture



Applications


안드로이드는 E-mail, SMS, Calender, browser, Contacts 등과 같은 Application을 탑재하고 있습니다. 모든 Application은 Java 로 작성되어있습니다.
  • 모든 Application은 가상머신에 대한 자신의 인스턴스를 가지고, 자신의 프로세스 내에서 실행된다.
  •  모든 Application은 동등한 입장으로 실행된다. 즉, 기본 시스템 대신, 직접만든 시스템을 초기화면으로 사용가능하다.


Applications Framework


말 그대로 번역하면 "사용할 수 있는 틀"이다. 기존에 만들어진 틀을 이용해 개발자들이 보다 편리하고 고성능의 Application을 개발할 수 있도록 지원하는 역할을 한다.

  • 개발자들을 위한 자원들이다. 이것을 통해 모든 Application을 개발할 수 있다.
  • User를 위한 UI 제작
  • data에 접근하기 위한 Content Provider가 있다.
  • 알림, 라이프사이클 관리
  • 여러가지 보안제약이 따른다.


Libraris

C,C++로 코딩되어 있고, 각 회사마다 사용되는 하드웨어를 지원하기 위해 업체에서 미리 스마트폰에 설치된다.

  • 라이브러리는 Applications Framework를 통해 개발자들에게 제공된다
  • 안드로이드는 임베디드 리눅스 기반의 디바이스에 적합하도록 표준 C시스템 라이브러리를 제공한다.
  • 미디어 라이브러리를 통해 여러가지 오디오, 비디오 포맷을 제공한다.
  • 그외 SurfaceManager, LibWebCore, SQLite 등이 있다.


Android Runtime

Java 프로그래밍 언어의 핵심 라이브러리에서 사용가능한 기능들을 포함하고 있다.  Core Library를 통해 Java의 핵심 라이브러리 기능을 사용할 수 있다.

* Runtime : 컴퓨터 프로그램이 실행되고 있는 동안의 동작을 말한다.

  • Dalvik VM
    • Java 컴파일된 클래스 실행
    • Dalvik 가상머신의 실행 파일인 dex 포맷을 사용한다.
    • Threading과 Low-level 메모리 관리는 Linux Kernel에 의존한다.
  • Core Library
    • Android에서 Java 프로그래밍을 위한 핵심 라이브러리이다.


Linux Kernel

안드로이드는 보안, 메모리 관리, 프로세스 관리, 네트워킹 등의 시스템 서비스를 제공한다.
즉, 부팅, 파일시스템, 하드웨어 제어를 위한 디바이스 드라이버 등이 여기에 해당한다.



 


 

이 댓글을 비밀 댓글로