vector image scaling in android

기존 이미지에 viewpager를 통한 slide 효과를 주었더니,

 

생각지도 못한 문제가 발생했다.

 

 

이미지 전환이 상당히 느렸다. 버버버벅….

 

이건 또 뭐야;;; 이제 이미지만 새로 작업하면 기능이 끝난 줄 알았는데,

 

페이지를 넘기던 우리 딸이 애니메이션 효과가 없으니 심심해 하는 것 같아서 넣었더니

 

배보다 배꼽이 더 크게 생겼다. 어헐…

 

 

왜 버벅이는지 찾아내기 위해 적용한 media player도 tts도 다 걷어냈지만 여전히 버버벅

 

결국 이미지 밖에 없어서 테스트 해보니 png 이미지가 문제. xxhdip로 해상도를 해놨으니 얼마나 무거웠을까.

 

 

기존에 이미지 작업 시에는 문제 없었는데 slide 효과 주면서 아마도 메모리 사용량에 무리가 간 것일 거라 추측을…

 

이미지를 줄이려고 보니, vector로 해야겠고.. pixabay에서 무료 svg 이미지를 새로 다운 받았다.

 

  1. android studio vector asset

 

project -> right click -> new -> vector asset click

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2016-09-25-%e1%84%8b%e1%85%a9%e1%84%8c%e1%85%a5%e1%86%ab-4-52-56

 

2. auto change svg to xml

svg파일을 drawable에 xml로 변환 저장한다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2016-09-25-%e1%84%8b%e1%85%a9%e1%84%8c%e1%85%a5%e1%86%ab-4-53-19

 

3. getDrawable로 vector를 불러왔다.

Drawable drawable = getActivity().getResources().getDrawable(R.drawable.elephant);

Screenshot_2016-09-25-03-48-52.png

결과가 이렇다. 벡터를 가져오긴 했는데 작은 사이즈 그대로

 

4. src 수정

 

  • layout xml
<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitXY"
    android:id="@+id/flashcard_img"
    android:layout_marginBottom="120dp"
    android:layout_marginTop="30dp"
    android:layout_centerHorizontal="true" />

 

  • gradle 추가

min version up, add supportlibrary

defaultConfig {
    minSdkVersion 21
    vectorDrawables.useSupportLibrary = true
}

 

drawable로 변경해야하는 줄 알았는데

Uri imgPath = Uri.parse("android.resource://" + getActivity().getPackageName() + "/drawable/" + eng);
mImgView.setImageURI(imgPath);

 

로도 잘 동작 하는 듯.

Screenshot_2016-09-25-05-05-47.png

 

https://code.google.com/p/android/issues/detail?id=202019

http://stackoverflow.com/questions/34936590/why-isnt-my-vector-drawable-scaling-as-expected

 

 

 

 

admob 적용하기

앱에 admob 광고를 붙여 보려고 한다.

 

 

우선 app이 있어야겠고, 해외 결제가 가능한 카드가 필요하다.

  1. google play 개발자 등록
  2. admob 가입 – 앱 id 발급 받기, 광고 id 발급 받기(string.xml 등 id삽입.)
  3. firebase 가입 – google-services.json  file download

 

 

안드로이드 스튜디오를 통한 애드몹 적용 방법.

한글로 매우 자세히 설명이 나와 있다.

개인적으로 이 튜토리얼 따라서 한 번 테스트 앱에서 동작 시켜 본 후 내 앱에 적용했다.

이 튜토리얼을 따라할 때는 위의 1,2,3 번의 과정을 하지 않고서도 가능하다.

(매우 자세한 튜토리얼로 인해 굳이 따로 안적겠다. 궁금한 것은 댓글로 문의를..)

https://firebase.google.com/docs/admob/android/quick-start

 

 

내 앱에 추가하려고 할 때

기존 앱에 적용하는 아래의 튜토리얼을 따라서 해야하는데 이 땐 admob과 firebase에 가입을 해야만 가능하다.

이미 구글 플레이에 개발자로 등록한 사람이야 해외결제 카드가 있겠지만 없을 경우 은행에서 하나 발급 후 가입과 동시에 admob에 결제 카드 정보를 입력해야한다.

(매우 자세한 튜토리얼로 인해 굳이 따로 안적겠다. 궁금한 것은 댓글로 문의를..)

https://firebase.google.com/docs/admob/android/existing-app

 

앱 만든다고,

아마존에 도메인 결제하고, 구글 플레이 개발자 등록, 애드몹 등록 했다.

개인 용돈에서 도메인 결제 해 본적이 처음이다.

회사, 아니면 신랑을 통해 구매를 했것만,

 

내 용돈 통장에서 연결한 카드로 결제하니 뭐가 모르게…

수익을 발생시키지 않으면 안될 것 같은 사명감이 불끈불끈

내 커피값이 줄었다는 불편한 진실…

 

Version: 8.1.0 is lower than the minimum version (9.0.0) required for google-services plugin.

admob을 기존에 개발하던 앱에 추가하는 중에 발생한 에러

 

앱 gradle에 보면

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    compile 'com.google.android.gms:play-services-appindexing:8.1.0'
    compile 'com.google.firebase:firebase-ads:9.0.0'
}
apply plugin: 'com.google.gms.google-services'

 

이렇게 돼 있다.

 

compile 'com.google.android.gms:play-services-appindexing:8.1.0'

이 부분이 문제인데  새로추가한 firebase 랑 버전이 안맞는 듯.

8.1.0 is lower than the minimum version (9.0.0)

required for google-services plugin.

 

그냥 무턱대고 구글에 검색했더니 다 이상한 것들만 나오고.. ㅎㅎㅎ

머리 안쓰려고 했더니;;;;;; 그래서 현재 google-services plugin 버전이 몇 까지 나왔는지 확인해보니

compile 'com.google.android.gms:play-services:9.4.0'

https://developers.google.com/android/guides/setup

란다.

 

firebase랑만 맞춰줄 생각에 9.0.0 으로 올리고 리빌드.

 

잘된다.

 

android studio string.xml locale

android studio 적응 잘 안된다.  res 폴더 추가해도 눈에 가시적으로 보이질 않으니..

 

 

일단 기존 한글에 en을 추가하려고 한다.

https://developer.android.com/training/basics/supporting-devices/languages.html#CreateDirs

스크린샷 2016-07-29 오후 6.02.29.png

 

저런 형태로 res/values-en을 추가했다.

android studio에서 우클릭 후 추가했는데 refresh해도 보이지 않자 아래에 있는 terminal을 이용해서 추가했다.

스크린샷 2016-07-29 오후 5.50.21.png

 

여전이 values-en 폴더는 보이지 않고 대신 저렇게 string.xml(en) 이라고 보인다.

스크린샷 2016-07-29 오후 5.50.34.png

 

setting -> laungaue에서 영어로 (us)로 바꾼 뒤 실행해보니 영어로 바뀌어서 나온다.

 

 

 

 

 

 

android studio bitbucket plugin error

bitbucket을 android studio에서 쓰려고 한다. 무료로 제한 접근을 해서 사용하려다 보니 git 말고 bitbucket을 사용하려하는데 android studio 랑  bitbucket은 그다지 친밀 조합이 아닌 듯.. 아니면 맥북이라서 그런가…

(에러 엄청 많이 났다…. 몇 시간 삽질인지… )

 

 

  1. android studio -> preference (windows  로 치자면 settings 정도..) -> plugins

 

스크린샷 2016-07-27 오후 4.37.51.png

bitbucket을 찾으면 된다.

나는 이미설치가 되어 있어서 저렇게 뜨지만

설치 안하신 분들은

bitbucket위에 android support 를 선택 후 bitbucket 을 찾거나

돋보기 검색 창에서 직접 bitbucket을 치면 된다.

 

2.  android studio restart 하면

에러가 뜬다.

 

plugin error … bitbucket.

 

구글에서 검색해보면 아래 처럼 나온다.

https://bitbucket.org/atlassian/jetbrains-bitbucket-connector/issues/117/121-incompatible-with-android-studio-20

I had an answer for this issue, and get fixed. Please follow the link below:http://stackoverflow.com/a/36607806/3819836

 

요지는 – 직접 플러그인 다운 받아서 설치해라. 다.

 

https://bitbucket.org/dmitry_cherkas/jetbrains-bitbucket-connector/downloads

아래 링크로 가서 최신의 플러그인을 다운 받는다.

 

기존 설치된 것은 preference로 가서 bitbucket을 찾아   (위 그림에서 보이는)uninstall 버튼을 살포시 눌러 준다.

preference 화면에서 이번엔 install plugin from disk… 라는 버튼을 눌러준다.

스크린샷 2016-07-27 오후 4.43.31.png

바로 위에 있는 이 버튼…

 

누르면 위의 창처럼 경로를 입력하라고 나온다.

bitbucket.jar를 선택 후 ok  누르면 이제 에러는 없어졌다.

 

3. bitbucket에 가서 빈 프로젝트를 하나 만든다. – git을 이용한 …

 

 

4. android studio의 vcs -> enable version control integ….

선택 후 뜨는 창에서는 git 선택.

 

5. 하루 지난 다음에 이어서 쓰려니 기억이 안난다… 이런…

vcs -> check out version control or import into version control을 통해서 연결 한 것 같은데…

 

*  git 연결이 잘 못 됐을 땐.. project folder 들어가서 .git 폴더를 지우고 다시 하면 된다.

난 하다가 쪽 나서 파일이 절반 밖에 안올라간 채로 연결이 모두 완료 됐다고 하고 더 이상 추가가 안돼서 처음부터 다시 했다.

 

 

참고 사이트

-http://yeoreogaji.blogspot.kr/2014/08/blog-post_25.html

http://peekaf.tistory.com/58

– http://www.goprogramming.space/connecting-android-studio-project-with-bitbucket/

-http://stackoverflow.com/questions/33515762/bitbucket-with-android-cant-publish-part-of-repository-error 

 

 

 

 

android email 보내기

private void sendEmail() {

        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse("mailto:")); // only email apps should handle this
        String email = getEmail(getApplicationContext());
        if (WLog.DEBUG) WLog.d(TAG, " email=" + email);
        intent.putExtra(Intent.EXTRA_CC, (email != null)? email:"");
        intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"xxx@gmail.com"});
        intent.putExtra(Intent.EXTRA_SUBJECT, "sugestion");

        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }
    }

    private String getEmail(Context context) {
        AccountManager accountManager = AccountManager.get(context);
        Account account = getAccount(accountManager);

        if (account == null) {
            return null;
        } else {
            return account.name;
        }
    }

    private Account getAccount(AccountManager accountManager) {
        Account[] accounts = accountManager.getAccountsByType("com.google");
        Account account;
        if (accounts.length > 0) {
            account = accounts[0];
        } else {
            account = null;
        }
        return account;
    }

 

 

개발자에게 이메일 보내기.

 

직접 사용하는 유저 폰에서 유저 이메일 계정을 얻어오고

받는 사람에 개발자 이메일을 기록한다.

 

이 부분의 경우

        intent.setData(Uri.parse("mailto:"));

아래 방법을 쓰는 것 보다 사용자에게 좀 더 직관적으로 메일 앱에 타겟 해서 보여주는 것 같아서

위와 같이 썼다.

startActivity(Intent.createChooser(i, "Choose an Email client :"));

 

menifest.xml에 권한 추가는 기본.

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

 

 

대충 정리.

android unsinged apk 추출

개발중인 앱의 apk 추출하려면?

 

run 실행 한 것만으로는 debug 까지만 생기는 듯.

 

안드로이드 오른쪽 바에 gradle view 클릭하면 아래 그림처럼 트리가 나온다.

app > assemble 더블킬릭하면 아래 창에 컴파일 진행 중인게 보인다.

 

build successful 이 나오면 완료.

 

파일경로는 project/appname~/app/build/outputs/apk/ 안에 있다.

 

스크린샷 2016-07-04 오후 4.20.16

android studio assets 폴더만들기

이전에 이클립스 시절 때처럼 assets 폴더를 res 안에 만들었는데,

 

studio에서 눈씻고 봐도 안보인다.

 

 

오호 통재라…

Where to place Assets folder in Android Studio

 

‘src/main/assets/’ 이라고 한다. gradle을 이용한 빌드로 바뀌면서 위치도 바뀐 듯.

 

메뉴에서 간단하게 생성 가능하다.

new -> file -> folder -> assets folder 로 하면 main 아래에 생성된다.

 

Performing stop of activity that is not resumed

Performing stop of activity that is not resumed

이전에 기록했던 것도 다 없어졌고, 예전 소스도 다 없고

바닥부터 시작하는데 자꾸 에러가 …

기억이 희미해졌지만 내겐 구글이있지~~~

로딩화면 만들다가 이렇게 됐는데 아래에 깔려있는 액티비티의 onpause가 불리지 않는다.

handler를 이용한 호출

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// startActivity A

Intent i = new Intent(MainActivity.this, MenuActivity.class);
startActivity(i);
}
}, 200);