안드로이드 2.0 ( api level 5 ) 부터 액티비티가 보여지고, 없어질때 뷰처럼 애니메이션을
설정할 수 있다.

사용법도 간단하다.
startActivity(); 를 하고, overridePendingTransition( R.anim.new_activity, R.anim.old_activity );

애니메이션이 설정되지 않은 경우는 새 액티비티는 오른쪽에서 슬라이드-인 되고,
기존 액티비티는 왼쪽으로 슬라이드-아웃 된다.

애니메이션은 기존 방식과 동일하게 res/anim 폴더에 xml 로 작성하던가,
Animation 객체를 생성해 사용해도 된다.

[ fade - animation ]

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_longAnimTime" />

[ hold - animation ]

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="0" android:toXDelta="0"
android:duration="@android:integer/config_longAnimTime" />

[ zoom_enter- animation ]

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator">
<scale android:fromXScale="2.0" android:toXScale="1.0"
android:fromYScale="2.0" android:toYScale="1.0"
android:pivotX="50%p" android:pivotY="50%p"
android:duration="@android:integer/config_mediumAnimTime" />
</set>

[ zoom_exit - animation ]

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top">
<scale android:fromXScale="1.0" android:toXScale=".5"
android:fromYScale="1.0" android:toYScale=".5"
android:pivotX="50%p" android:pivotY="50%p"
android:duration="@android:integer/config_mediumAnimTime" />
<alpha android:fromAlpha="1.0" android:toAlpha="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>

 

[ Left_in - animation ]


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator">
<translate
android:fromXDelta="-100%"
android:toXDelta="0"
android:duration="300"
/>
</set>

[ Left_out - animation ]

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator">
<translate
android:fromXDelta="0"
android:toXDelta="-100%"
android:duration="300"
/>
</set>

 

[출처] - http://dotndotandroid.blogspot.kr/2011/05/activity-overridependingtransition.html + 자체수정

신고

이클립스에서 프로젝트 이름에 빨간색 느낌표가 나옵니다.
inhamech (2011-02-02 15:33:10 작성)

빨간색의 마크는 오류의 경우죠.

여러가지 경우의 수가 있겠습니다.

 

보통의 그런 경우는

Build Path가 안 맞아서 그럴겁니다.

톰캣 버젼이 다르고, 설치된 위치가 다를 것인데

이클립스의 project 파일과 classpath 파일이 다른 위치의 것을 옮겨왔기 때문이죠.

 

프로젝트에서 마우스 우클릭해서 build path setup 하는 곳에 들어가보면

참조하는 jar 파일 중에 x 표시가 있는 것이 있을겁니다.

그걸 지우고 정확한 위치로 다시 잡아주세요.

 

또 jdk 버젼이 다른 경우에도 그럴 수 있습니다.

Default Java Compiler 버젼이 어찌 되어 있는지 확인하시고 맞춰주세요.

 

아, 그리고 빨간 느낌표라면

CVS 또는 그와 유사한 형상관리툴을 사용하는 경우

형상서버의 내용이 로컬수정파일과 충돌이 나는 경우에도 나타납니다.

 

기본적으론 자바 에디터 아래쪽에 있는 problems tab을 확인해보시면 무엇때문에 빨간 느낌표가 나오는지 알 수 있을 것입니다.

 

참고가 되셨길 바랍니다.


[출처]http://down.file.naver.com/howpc/kin.nhn?m=read&section=read&docid=124680026&page=149

신고

*ADT 17 버전 부터는 라이브러리 파일을 프로젝트 내 libs 폴더에 넣어야 제대로 인식한다.

 빌드패스를 따로 잡아주지 않아도 자동으로 인식한다.

 샘플 소스는 libs 폴더에 넣지 않았기 때문에 ADT 17버전에서는 실행시 Exception이 발생한다.

 libs 폴더로 jar 파일을 이동시키고 빌드패스를 수정하면 된다.



지난번 ViewPager에 대해서 간단한 예제를 만들어봤다. 이번에는 ViewPager에서 사용하는 다른 Adapter 및 다른 기능에 대해서 조금 설명하고자 한다.


1. Fragment를 사용하는adapter

Fragment는 Android 3.0 (허니콤)부터 추가된 기능이다. Fragment를 잘 모르시는 분이라면 조금만 검색하면 개념적인 내용은 알 수 있다.

개념적 설명 : http://androidhuman.tistory.com/469

실 사용 설명 : http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html



 Fragment를 사용하는 Adapter를 쓴다면 3.0 이전의 버전에서 개발하는 앱에서는 사용을 못하는 것인가? 결론부터 말하면 그렇지 않다. ViewPager를 사용하기 위해 받은 Support Package에는 v4와 v13 2개의 라이브러리가 있다. v4는 api 버전 4. 즉 1.6 도넛 부터 사용할 수 있게 만든 라이브러리 이다. 3.0 이전의 버전에서는 이 라이브러리를 통해서 FragmentPagerAdapter와 FragmentStatePagerAdapter를 사용할 수 있다.


2. FragmentPagerAdapter와 FragmentStatePagerAdapter

Fragment를 처리하는 PagerAdapter는 두 가지 Class가 존재한다. 하나는 FragmentPagerAdapter 이고 다른 하나는 FragmentStatePagerAdapter이다. FragmentPagerAdapter의 경우, 사용자가 ViewPager에서 좌/우로 스크롤(플링)하여 화면 전환을 하여 다음 Fragment가 표시되면 이전 Fragment를 메모리 상에 저장해 만일 사용자가 화면을 반대로 이동하면 메모리 상에 저장되어있는 Fragment를 사용하게된다.

 2번째 FragmentStatePagerAdapter는 ViewPager의 페이지를 이동하여 다음 Fragment가 표시되면 이전 Fragment는 메모리 상에서 제거된다. 사용자가 화면을 다시 반대로 전환하면 기존에 저장된 상태값(state)을 기반으로 재생성합니다.

 그러므로 페이지 수가 정해져 있고 그 수가 많지 않다면 FragmentPagerAdapter를 사용하는 편이 좋고 반대로 페이지 수를 알 수 없거나 많다면 FragmentStatePagerAdapter를 사용하는 것이 좋다.


3. 사용방법

FragmentPagetAdapter나 FragmentStatePagerAdapter 생성자의 파라미터로 FragmentManager를 넘겨주어야 한다. 3.0 이전 버전에서 사용하려면 Activity 대신에 Support Package에 있는 FragmentActivity를 상속받아야 한다.


*Activity의 onCreate 메소드

public class FragmentPagerAdapterSampeActivity extends FragmentActivity {

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewpager);
        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(new BkFragmentAdapter(getSupportFragmentManager()));
    }

}


FragmentPagerAdapter나 FragmentStatePagerAdapter나 실제 구현하는 소스 부분은 똑같다. 상속받는 클래스명만 바꿔주면 된다.


    //FragmentPager 구현
    private class BkFragmentAdapter extends FragmentPagerAdapter{
        //생성자
        public BkFragmentAdapter(FragmentManager fm) {super(fm);}

        /**
         * 실제 뷰페이저에서 보여질 fragment를 반환.
         * 일반 아답터(갤러리, 리스트뷰 등)의 getView와 같은 역할
         * @param position - 뷰페이저에서 보여저야할 페이지 값( 0부터 )
         * @return 보여질 fragment
         */
        @Override public Fragment getItem(int position) {
            return ArrayFragment.newInstance(position);
        }

        //뷰페이저에서 보여질 총 페이지 수
        @Override public int getCount() { return COUNT; }
    }


일반적인 리스트뷰나 갤러리의 아답터와 비슷하다. 다만 getItem 부분에 Fragment를 반환해야 한다. 여기서 ArrayFragment는 Fragment를 상속받아 실제 fragment를 구현하는 부분이다. 이 부분은 실제 예제를 다운받아 소스를 보면서 이해하는 것이 빠를 것 같아 글로 올리지는 않습니다.


4. ViewPager에서 꼭 알아야 하는 기능

* 현재 페이지 표시하기

좌우로 화면이 전환되는 앱을 보면 상단이나 하단에 현재 페이지가 몇 번째 페이지 인지 표시하는 기능이 있다. 예를 들면 아이폰의 바탕화면 하단에 있는 것이나 고런처의 페이지 표시 같은 기능 말이다.



 


이 기능은 ViewPager의 setOnPageChangeListener 메소드를 통해 OnPageChangeListener를 구현하면 사용할 수 있다.


mPager.setOnPageChangeListener(new OnPageChangeListener() {    //아이템이 변경되면
      //아이템이 선택이 되었으면
     @Override public void onPageSelected(int position) {

         //이전 페이지에 해당하는 페이지 표시 이미지 변경
         mPageMark.getChildAt(mPrevPosition).setBackgroundResource(R.drawable.page_not);


         //현재 페이지에 해당하는 페이지 표시 이미지 변경    
         mPageMark.getChildAt(position).setBackgroundResource(R.drawable.page_select);
         mPrevPosition = position;                //이전 포지션 값을 현재로 변경
     }
    @Override public void onPageScrolled(int position, float positionOffest, int positionOffsetPixels) {}
    @Override public void onPageScrollStateChanged(int state) {}
});

 

 

 



* 특정 페이지로 이동하기

특정 이벤트가 발생했을 때 사용자가 직접 화면 페이지 이동을 하지 않아도 자동으로 페이지가 넘어가야하는 경우가 필요하다. 잡지 앱의 경우 목차에서 페이지를 선택하면 바로 해당 페이지로 이동하는 기능 같은 것 말이다.


이 기능은 ViewPager의 setCurrentItem(int item, boolean smoothScroll) 메소드를 이용하면 간단히 구현 가능하다. Gallery의 setSelection(int position, boolean animate)와 같은 기능이다. Gallery에서 animate가 true던, false던 애니메이션이 동작하지 않는다. 페이지 이동 시 그냥 바로 페이지가 바뀐다.

하지만 ViewPager에서는 이 기능을 완벽히 지원한다. setCurrentItem(int item, boolean smoothScroll) 메소드의 smoothScroll이 false이면 애니메이션 없이 바로 페이지 이동을 하고 smoothScroll이 true이면 애니메이션이 동작하면서 페이지가 자연스럽게 이동한다.


    @Override
    public void onClick(View v) {
        int view = v.getId();
        if(view == R.id.prev){        //이전 버튼
            int cur = mPager.getCurrentItem();    //현재 아이템 포지션
            if(cur > 0)                //첫 페이지가 아니면
                mPager.setCurrentItem(cur-1, isAnimated);    //이전 페이지로 이동
            else                        //첫 페이지 이면
                Toast.makeText(getApplicationContext(), "맨 처음 페이지 입니다.",

                                      Toast.LENGTH_SHORT).show();
        }
        else if(view == R.id.next){    //다음 버튼
            int cur = mPager.getCurrentItem();    //현재 아이템 포지션
            if(cur < COUNT-1)        //마지막 페이지가 아니면
                mPager.setCurrentItem(cur+1, isAnimated);    //다음 페이지로 이동
            else                        //마지막 페이지 이면
                Toast.makeText(getApplicationContext(), "맨 마지막 페이지 입니다.",

                                       Toast.LENGTH_SHORT).show();    //메시지 출력
        }
    }


전체 샘플 코드 첨부하였습니다.

*글과 자료는 출처만 밝히시면 얼마든지 가져다 쓰셔도 됩니다.

 ViewPagerSampe2.0.zip


[출처]http://blog.daum.net/mailss/19

신고

android에서 외부(sdcard) db를 열려면?

Android/소스참고 | 2012.08.06 16:22
Posted by 위드 위더스
pc에서 만든, sqlite파일을 안드로이드에 삽입하여 사용하고 싶다면, 어떻게 해야할까? 

SQLiteDatabase의 openDatabase를 사용하면 된다. 

예는 다음과 같음. 



신고

안드로이드에서 기본적으로 SQL 파일을 만들면 내부 메모리의 해당 어플이 설치된 폴더 내에 db 파일이 생성된다.
이 경우 대용량의 데이터를 처리하기에는 용량이 부족하여 곤란한 경우가 발생한다.

SQLiteDatabase 를 직접 이용하여 SDCARD 에 (원하는 폴더에) DB 파일을 생성하여 사용할 수 있다.

하지만, SD 메모리의 속도가 너무 느려서, 빠른 반응 속도가 필요한 경우엔 사용이 불가능해 보인다. 
데이터 입출력이 잦지 않으면서, 대용량의 데이터를 DB로 처리해야 할 경우에는 고려해 볼만 하다.

아래 코드는 데이타베이스 파일을 생성하고 읽고, 쓰기 위한 어댑터 샘플.


아래는 위의 어댑터 클래스를 이용하는 메인 클래스 샘플.

[출처] http://drkein.tistory.com/m/post/view/id/161


신고

레이아웃 전개

Android/Study | 2012.07.20 16:34
Posted by 위드 위더스

http://blog.naver.com/PostView.nhn?blogId=jangjl15&logNo=140112558344&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

신고

[출처]http://woono.tistory.com/47

Eclipse 에서 Android Framework Base Source Download 하고 연결하기


"Android Framework Base Source" 를 받기 위해서는 "Linux" 의 "Git" 이나 "Repo" 를 이용해야 한다.

과거에 브라우저를 통해 받을 수 있었는데 해킹을 당한 후 브라우저로 Download 받는 것이 불가능한다.

이번 시간에는 "Eclipse PlugIn" 인 "JGit" 를 사용해서 받는 방법을 알아 보도록 한다.



1. 설치 시 필요한 것


 

Eclipse, JDK, Android SDK 가 설치 되어 있어야 한다.



1) Eclipse Downlaod

다운로드 : http://www.eclipse.org/downloads/

아래 둘 중 하나를 다운 받으면 된다.

● Eclipse IDE for Java Developers


● Eclipse for RCP and RAP Developers



2) sun-java JDK Downlaod

설치 사이트 : http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3-download-1501626.html

위 사이트에서 아래 둘 중 하나를 받으면 된다. (Link 를 바로 클릭해서 받아도 된다.)




3) android-sdk-windows Downlaod


설치 참고 사이트 : http://developer.android.com/sdk/index.html


"Eclipse" 에 "Android SDK" 를 연동 하는것은 아래 사이트를 통해 참고하기 바란다.

설치 가이드 : http://developer.android.com/sdk/installing.html



2. Google Password Generator 실행


아래 사이트는 google 에서 제공하는 Androud Platform Base Source 를 받는 법을 소개 한다.

http://source.android.com/source/downloading.html


※ Base는 참고용 Source 입니다 Build 할 수 없다.

Windows에서 FullSource를 받고 싶으면 아래 사이트들을 참고 하기 바란다.

아래 Site 에 방문하면 "repo" 랑 비슷한 shell script 를 제공한다. 그것을 msysgit 에서 실행 하면 된다.

http://bradchow.wordpress.com/2009/01/20/get-android-source-code-in-m-windows/


"Git" 과 "Repo" 사용법이 나와 있다.

하지만 많은 사람들이 이곳에서 좌절을 격 거나 "Linux" 를 설치하기에는 너무 큰 부담을 가지고 있다.

아래 원본주소나 짧은주소 링크를 통해 계정의 패스워드를 생성한다. (링크가 무식하게 길다 ㅠㅠ)


위의 Link 중 아무거나 선택해서 브라우저를 실행한다.


[그림 2-1]


[그림 2-1] 처럼 로그인 화면이 나온다. (Google 계정에 이미 가입이 되어 있고 로그인이 되어 있으면 다음 화면으로 진행된다)

Google 계정이 있으면 Google 계정을 입력해주면 된다.

없으면 "가입하기" 버튼을 클릭해서 가입 절차를 진행한다.


[그림 2-2]


Google 계정에 로그인을 했으면 [그림 2-2] 처럼 권한요청 페이지가 나오게 된다.

여기서 "억세스 허용" 버튼을 선택한다.



[그림 2-3]



[그림 2-3] 처럼 승인이 완료된 페이지가 나오는데 생성된 "Username" 과 "Password"는 따로 메모장 같은 곳에 복사해둔다.

잡설 : 원문에 보면 원래는 안드로이드 소스 코드에 대한 억세스는 익명으로 가능하지만 과도한 사용에 대해서 서비스를 보호하려면(서버가 해킹 당한적이 있었죠 ^^) 각 IP에 대해서 억세스가 인증이 되도록 패스워드를 생성해서 ~/.netrc 에 저장을 해야 한 다는군요.



3. Eclipse JGit PlugIn 설치


"Eclipse" 를 실행 하고 "Menu" 에서 "Help > Install New Software..." 를 선택 한다.


 


[그림 3-1]


Name : JGit PlugIn
Location : http://www.jgit.org/updates

[그림 3-1]에서 "Name" 과 "Location" 입력하고 "OK"를 선택한다.


[그림 3-2]


[그림 3-2]에서 "Eclipse Git Team Provider" 를 선택하고 "Eclipse EGit"를 선택하고 "Next"를 선택한다.

계속해서 "Next"를 누르면 설치 과정이 진행되면서 "JGit PlugIn" 이 설치가 완료된다.

"Eclipse" 를 다시 실행한다.



4. JGit 으로 Source 받기


"JGit"으로 Source를 받기 위해서는 먼저 "Eclipse" 를 실행한다.

[그림 4-1]


[그림 4-1] 처럼 "File > Import"를 선택한다.


[그림 4-2]


[그림 4-2] 처럼 "Select" 항목에서 "Git > Projects from Git" 을 선택하고 "Next"를 선택한다.


[그림 4-3]


[그림 4-3]처럼 "URI" 를 선택하고 "Next"를 선택한다.


[그림 4-4]


URI : https://android.googlesource.com/a/platform/frameworks/base.git


[그림 4-4]에서 "URI" 를 입력하고 [2. Google Password Generator 실행] 에서 생성한 "Username" 과 "Password" 를 "User" 와 "Password" 란에 입력하고 "Next"를 선택한다.


[그림 4-5]


[그림 4-5] 처럼 "Branch" 를 선택 하는 화면이 나오는데 "Default" 로 놔두고 "Next"를 선택한다.


[그림 4-6]


[그림 4-6] 처럼 저장 할 "Directory" 위치를 묻는데 적당한 곳에 "Directory" 를 지정해주고 "Next"를 선택한다.


[그림 4-7]


[그림 4-7]처럼 파일을 Download 하는 화면이 나오는데 상당히 오랜 시간이 걸린다. (다른 작업을 하거나 잠시 자리를 비우는 것이 정신 건강에 좋다)


[그림 4-8]


어느정도 시간이 경과되면 [그림 3-8] 처럼 Downlaod 이 후 화면이 나오는데 이곳에서 "Finish"를 선택한다.

이후 "Wizard for project import" 가 실행 되는데 무시해도 된다.



5. Source 연결하기


"Eclipse" 에서 Test용 Project를 생성하거나 기존 Project 를 실행하고 "Editor" 창을 연다.


[그림 5-1]


[그림 5-1]처럼 "Activity" 에서오른쪽 마우스를 클릭하고 "Open Declaration"을 선택한다.

또는 단축키 "F3"을 눌러도 된다.


[그림 5-2]


[그림 5-2] 처럼 Source not found 라는 화면이 출력되는데 "Change Attached Source..." 버튼을 클릭하고 "Location path"에 아까 받은 경로를 지정해 주고 "OK"를 누르면 Souce 가 연결된 것을 볼 수 있다.

 

[출처]http://woono.tistory.com/47

신고
신고

안드로이드에서 시간 변화 체크

Android/소스참고 | 2012.07.06 11:14
Posted by 위드 위더스
신고
안드로이드 개발을 하다 보면 분명 지정을 다 해 줬는데도 불구하고 
android.content.res.Resources$NotFoundException: String resource ID.....
이 오류는 textView.setText(int형)일 때 발생한다.
(※다른 모든게 다 잘 되어 있는데도 불구하고 에러 발생시 이런 경우가 종종 있다;;;;ㄷㄷㄷㄷㄷ)


신고
블로그 이미지

위더스

카테고리

With (44)
Android (36)
JAVA&JSP&ASP (2)
Eclipse참조 (1)
DB (2)
참조 (2)

티스토리 툴바