'분류 전체보기'에 해당되는 글 333건

  1. 2012.08.15 [Android] Canvas Animation
  2. 2012.08.13 [Android] MotionEvent, 마우스 이벤트
  3. 2012.08.10 [Android] 동영상 관련, VideoView 2
  4. 2012.08.09 [Android] 현재 사용 메모리, 숫자 1000단위 콤마
  5. 2012.08.08 [Android] TranslateAnimation, Interpolator
  6. 2012.08.08 [Android] Layout의 중앙에 TextView표시
  7. 2012.08.07 [Android] Handler
  8. 2012.08.02 [SVN] 간단 사용법
  9. 2012.08.02 [Android] App Icon, 어플리케이션 아이콘
  10. 2012.07.31 [Android] Device Information. 단말기 정보
  11. 2012.07.31 [Android] Layout. EditText no border. 에디트텍스트 테두리 없애기.
  12. 2012.07.30 [Android] WebView의 링크클릭시, 이벤트 핸들링
  13. 2012.07.30 [Android] 그라데이션 버튼, Gradient Button <sample><ref> 1
  14. 2012.07.27 [Android] 레이아웃에서 콤포넌트 받아오기. layout. xml
  15. 2012.07.25 [Android] ImageView
  16. 2012.07.25 [Android] URL에서 데이터 읽기
  17. 2012.07.24 [Android] Animation
  18. 2012.07.18 [Android] BitmapDrawable
  19. 2012.07.13 [Android] Canvas
  20. 2012.07.11 [Android] 타이틀바 제거, 화면방향
  21. 2012.07.03 [Android] Memory Management. out of Memory.
  22. 2012.07.03 [Android] Activity Life Cycle
  23. 2012.07.03 [Android] Activity, Context
  24. 2012.07.03 [Java] Number Format, DecimalFormat
  25. 2012.07.02 [Java] Runtime Memory
  26. 2012.06.29 [Android] Lazy Loading
  27. 2012.06.27 [Android] SeekBar
  28. 2012.06.26 [Android] prev button
  29. 2012.06.25 [Android] ImageButton
  30. 2012.06.20 [Android] Link to Default. 기본어플 연결.

[Android] Canvas Animation

Android 2012. 8. 15. 15:56

invalidate를 루프에서 처리하면 onDraw가 불리지 않는다.

핸들러에서 재귀호출을 하면 /일단은/ 가능하다.


public final Handler refreshHandler = new Handler() {

public void handleMessage(Message msg) {



Act3Activity.this.ca.invalidate();

this.sendEmptyMessageDelayed(0, 25);   <-  25 milisecond 후에 재귀 호출

}

};


Posted by tenn
,

싱글터치


ACTION_DOWN   

ACTION_MOVE   

ACTION_UP      

ACTION_CANCEL    :    터치영역을 벗어날때 (버튼을 누른후 버튼영역을 벗어날때)



멀티터치


ACTION_POINTER_1_DOWN    :    먼저닿은 손가락이 떨어진 후 다시 터치할때

(나중에 닿은 손가락은 계속 터치)

ACTION_POINTER_1_UP        :    먼저 닿은 손가락이 떨어질때

ACTION_POINTER_2_DOWN    :    한손가락을 터치한 채로 다른 손가락이 터치될때

ACTION_POINTER_2_UP    :    나중에 터치된 손가락이 떨어질때



Posted by tenn
,

확인단말 : GalaxyNexus, Galaxy S2


Galaxy Nexus에서 좀처럼 동영상을 재생해주지않아서 삽질.


raw리소스의 동영상 파일을 file로 출력한 후, 생성파일을 이용해서 재생.

생성화일의 확장자는 관계없었다. (mp4를 mov로 바꾸어도 재생가능)


a() : 안드로이드에서 제공해주는 ACTION_VIEW 이용.

b() : VideoView + MediaController 이용.



방법1. 갤러리 이용


void a(){


this.filecopy();

String path = getFilesDir().getAbsolutePath()+"/"+FILE_NAME;

Log.e(null, path);

Log.e(null, "file exist? "+ new File(path).exists());


Intent i = new Intent(Intent.ACTION_VIEW);

 


Uri uri = Uri.fromFile(new File(path));

  it.setDataAndType(uri, "video/*");

  startActivity(i);

}


방법2. VideoVIew



void b(){


VideoView vv = (VideoView) findViewById(R.id.videoView1);


MediaController mc = new MediaController(this);

mc.setAnchorView(vv);

this.filecopy();

String path = getFilesDir().getAbsolutePath()+"/"+FILE_NAME;

Log.e(null"xxx : "+path);

Log.e(null"file : "+new File(path).exists());

vv.setMediaController(mc);

//Uri uri = Uri.fromFile(new File(path));

//vv.setVideoURI(uri);  //uri로도 정상동작

vv.setVideoPath(path);

vv.requestFocus();

vv.start();

}




raw Resource -> file


final String FILE_NAME = "a1.mp4";


void filecopy() {


Log.e(null, "filecopy");

InputStream in = this.getResources().openRawResource(R.raw.a14); //raw리소스


int size;

byte[] w = new byte[1024];

OutputStream out = null;

try {

out = this.openFileOutput(FILE_NAME, Context.MODE_WORLD_READABLE);

while (true) {

size = in.read(w);

if (size <= 0)

break;

out.write(w, 0, size);

}

out.close();

in.close();

} catch (Exception e) {

Log.e(null, e.toString());

}


}


Posted by tenn
,


long m = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

DecimalFormat df = new DecimalFormat("#,##0");

Log.v(null, "using mem : "+df.format(m));



Posted by tenn
,



Button btn = (Button) this.fv.findViewById(R.id.btn1);


int x = btn.getLeft();

int y = btn.getTop();


TranslateAnimation moveAnim = new TranslateAnimation(1000, x, y, y); 

//화면밖에서 가로로 이동하여 xml layout의 위치로 이동.

moveAnim.setDuration(1000);   //1초간

moveAnim.setFillAfter(true);    // 애니메이션이 끝난 후, 타겟오브젝트는 애니메이션이 끝난 자리에

moveAnim.setInterpolator(AnimationUtils.loadInterpolator(this.context, android.R.anim.overshoot_interpolator));


btn.setAnimation(moveAnim);



Posted by tenn
,




RelativeLayout fl = new RelatedLayout(this);

fl.setBackgroundColor(Color.BLUE);


TextView tv = new TextView(this);

tv.setText("Set Text");

tv.setBackgroundColor(Color.WHITE);

tv.setHeight(100);

tv.setWidth(100);

tv.setGravity(Gravity.CENTER);


LayoutParams lp2 = 

new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

lp2.addRule(RelativeLayout.CENTER_IN_PARENT);

fl.addView(tv, lp2);




Posted by tenn
,

[Android] Handler

Android 2012. 8. 7. 14:04

Activity의 UI는 외부에서 변경이 불가능하다.

외부에서 UI변경을 하는 핸들러에 메세지를 보내면 된다.




final Handler handler = new Handler() {

  

public void handleMessage(Message msg) {

 

Bundle bundel = msg.getData();

 

int i = bundel.getInt("i");


 

}

}; 




....



//핸들러 호출부


Bundle bundle = new Bundle();

bundle.putInt("i", i);   

Message msg = mHandler.obtainMessage();

msg.setData(bundle);

mHandler.sendMessage(msg);   



Posted by tenn
,

[SVN] 간단 사용법

etc 2012. 8. 2. 14:20




이클립스를 사용. 터미널에서 svn이 사용가능할 것.


1. workspace에서 check out

svn -co [repository url] [target directory]

ex) svn -co http://aaa.bbb.ccc/projectd/trunk projectd



2. 이클립스에서 프로젝트로서 import

  checkout 시 svn에 필요한 정보들이 파일로 자동 생성되므로, svn plugin(subclipse)가 있을시 그대로 repository기능 사용가능.



3. 기본 명령

svn commit -m [comment]

svn update

svn status

svn add [file, directory]

svn info

svn delete [file, directory]



Posted by tenn
,

각각의 폴더에 해당 사이즈의 이미지를 넣어준 후


/res

/drawable-hdpi   : 72 x 72 icon

/drawable-ldpi    : 36 x 36 icon

/drawable-mdpi    : 48 x 48 icon

/drawable-xhdpi    :   96 x 96 icon   <- galaxy nexus 따위


Manifest > application

Icon 에 넣어준 이미지를 선택해준다.

Label은 아이콘과 함께 표시할 어플리케이션 이름.



Posted by tenn
,




단말기 정보


Build.MODEL  // 단말기 모델 이름

Build.DEVICE    // 단말기 디바이스 코드


OS 정보


Build.VERSION.RELEASE //OS 버전

Build.VERSION.SDK   // 개발킷(프레임워크)의 버전. depracated 된듯?



서비스 프로바이더 


TelephonyManager manager = (TelephonyManager)thisAct.getSystemService(Context.TELEPHONY_SERVICE);

String carrierName = manager.getNetworkOperatorName();

   



Posted by tenn
,



백그라운드를 투명으로 설정.


...

android.background = "#00000000"

...



Posted by tenn
,







WebView wv;


...code...

String html = "<a href="keyword">click this</a>";

...code...


wv.setWebViewClient(new WebViewClient() {

    @Override

    public boolean shouldOverrideUrlLoading(WebView view, String url) {

   

    if (url. equals("keyword")){     //url가 keyword일시에 methodA 실행

        ClassA.this.methodA();

    }

    return true;

//return super.shouldOverrideUrlLoading(view, url);

  }

}

);



Posted by tenn
,




btn_red.xml


<?xml version="1.0" encoding="utf-8"?>
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#ef4444" />
            <stroke
                android:width="1dp"
                android:color="#992f2f" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#ef4444"
                android:endColor="#992f2f"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#992f2f" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>



layout.xml


<Button android:text="Button" android:id="@+id/button1" android:background="@drawable/btn_red"></Button>



참조 : http://www.dibbus.com/2011/02/gradient-buttons-for-android/







Posted by tenn
,

현재의 컨텐츠 레이아웃에서 콤포넌트 받아오기


Button btn = (Button)findViewById(R.id.button1);




다른 레이아웃에서 받아오기



        LayoutInflater factory = LayoutInflater.from(this);
        View main2 = factory.inflate(R.layout.main2, null);

        Button btn = (Button)main2.findViewById(R.id.btn);



Posted by tenn
,

[Android] ImageView

Android 2012. 7. 25. 14:07



ImageView iv = new ImageView(this);


LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);


lp.setMargins(20, 0, 20, 0); // 마진 설정은 LayoutParams에서


layout.addView(iv, lp);




imageview.setScaleType(ImageView.ScaleType.CENTER);

//이미지는 원래 크기. 중앙에 위치.


more


width, height 설정


iv.getLayoutParams().width = 100;

iv.getLayoutParams().height = 100;





Posted by tenn
,


① INTERNET 퍼미션 설정하고,

② 스레드를 생성해서, 코드 실행. (메인스레드에서 네트워크를 바로 사용할수 없다는 듯?)



//URL 에서 스트림 생성해서 읽기

    URL url = new URL("https://www.google.co.jp/");

           

                BufferedReader in = new BufferedReader(

                new InputStreamReader(url.openStream()));

                String inputLine;

                while ((inputLine = in.readLine()) != null)

                in.close();







Posted by tenn
,

[Android] Animation

Android 2012. 7. 24. 18:26



FadeIn FadeOut



      Animation fadeIn = new AlphaAnimation(0, 1);

            fadeIn.setInterpolator(new DecelerateInterpolator()); 

            fadeIn.setDuration(2000);


            Animation fadeOut = new AlphaAnimation(1, 0);

            fadeOut.setInterpolator(new AccelerateInterpolator()); 

            fadeOut.setStartOffset(2000);

            fadeOut.setDuration(2000);


//두 애니메이션을 묶어주기 위한 AnimationSet

            AnimationSet animation = new AnimationSet(true);

            animation.addAnimation(fadeOut);

            animation.addAnimation(fadeIn);



// 애니메이션 이벤트 핸들링을 위한 리스너

            animation.setAnimationListener(new AnimationListener() {

                public void onAnimationStart(Animation animation) {}

                public void onAnimationRepeat(Animation animation) {}

                public void onAnimationEnd(Animation animation) {

                }

            });

            

            

            fl.setAnimation(animation);    

//애니메이션 줄 대상에 애니메이션 세팅







이동 애니메이션


   TranslateAnimation moveAnim = new TranslateAnimation(0, 0, 100, 0);

//( x move from, x move to, y move from, y move to)

    moveAnim.setDuration(1000);

    moveAnim.setFillAfter(true);    //애니메이션이 끝난 후, 그 위치에






AnimationSet의 Repeat


Thread + Handler를 사용.

AnimationSet의 setRepeatCount가 듣지를 않던데...?



...

new Thread(){

public void run(){

while(frame != null){

alphaAnim.sendEmptyMessage(0);

SystemClock.sleep(4000);

}

}

}.start();

...




public final Handler alphaAnim = new Handler() {

public void handleMessage(Message msg) {

 

           

    Animation fadeOut = new AlphaAnimation(1, 0.2f);

            fadeOut.setInterpolator(new AccelerateInterpolator()); 

            fadeOut.setStartOffset(2000);

            fadeOut.setDuration(2000);


            Animation fadeIn = new AlphaAnimation(0.2f, 1);

            fadeIn.setInterpolator(new DecelerateInterpolator()); 

            fadeIn.setDuration(2000);


            AnimationSet animation = new AnimationSet(true);

            animation.addAnimation(fadeOut);

            animation.addAnimation(fadeIn);

           

            //animation.setRepeatCount(100);

            //animation.setRepeatMode(Animation.RESTART);

           

            tv.startAnimation(animation);

}

};








Posted by tenn
,

[Android] BitmapDrawable

Android 2012. 7. 18. 14:26


leak의 가능성이 있는 BitmapFactory보다는 BitmapDrawable을 쓰는 편이 안전.


BitmapDrawable drawable = 
            (BitmapDrawable) getResources().getDrawable(R.drawable.icon);
Bitmap bitmap = drawable.getBitmap();




BitmapDrawable.getBitmap()  의 결과값은 final 이므로 수정불가.

수정하고 싶을때는 copy로 인스턴스를 얻는다.


Bitmap bitmap = drawable.getBitmap().copy(Config.ARGB_8888true);




Posted by tenn
,

[Android] Canvas

Android 2012. 7. 13. 11:57





protected void onDraw(Canvas canvas) {

//사각형 그리기


Paint pnt = new Paint();


pnt.setStrokeWidth(3);                //선굵기

pnt.setStyle(Paint.Style.STROKE);  //외곽선만


pnt.setARGB(255, 255, 255, 255);

canvas.drawRect(0,0,50,50,pnt);

}



Posted by tenn
,




타이틀바 제거


<< Code >>

    requestWindowFeature(Window.FEATURE_NO_TITLE);

 or


<< layout.xml >>

android:theme="@android:style/Theme.NoTitleBar"





가로, 세로 화면 방향 설정


setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 



Posted by tenn
,


Recycle Bitmap


액티비티가 destroy될 때 해제. 안하고 놔두면 뻗는다.


protected void onDestroy(){

bitmap.recycle();

bitmap = null;

}



Recycle ImageView's Bitmap


((BitmapDrawable)picView.getDrawable()).getBitmap().recycle();



Posted by tenn
,




 public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();
     
     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();



ref : http://developer.android.com/reference/android/app/Activity.html

Posted by tenn
,




현재 실행중인 액티비티의 이름 구하기


ActivityManager mActivityManager=(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

Log.e(TAG, "context : "+mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName());









Posted by tenn
,

천단위 소숫점


long a = Runtime.getRuntime().freeMemory();

DecimalFormat df = new DecimalFormat("#,##0");

System.out.println(df.format(a));



Posted by tenn
,

[Java] Runtime Memory

JAVA 2012. 7. 2. 13:23


Runtime.getRuntime().totalMemory();   

Runtime.getRuntime().maxMemory();    //가상머신이 사용하려고 한 가장 큰 메모리

Runtime.getRuntime().freeMemory();




Posted by tenn
,

[Android] Lazy Loading

Android 2012. 6. 29. 18:01


Lazy Loading 처리


Thread로 UI갱신을 하려고 하면 예외(※1)가 발생한다.

그러므로 Thread에서 UI의 갱신을 할수 있는 Handler를 호출.

Thread에서 약간의 딜레이(sleep)을 두지 않으면, 메인의 UI가 반응하지 않는 현상이 있었다.


※1 ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views





//UI갱신을 위한 핸들러

final Handler handler = new Handler() {

  

public void handleMessage(Message msg) {

 

Bundle bundel = msg.getData();

 

int i = bundel.getInt("i");

 

// Lazy Loading 처리 구문을 여기에.

// UI는 Class.this로 직접 지시.

 

}

}; 


//쓰레드 처리를 위한 클래스

class LazyLoad extends Thread{

Handler mHandler; //UI접근을 위한 핸들러

int length// 반복수 


public LazyLoad(int length, Handler handler){

this.mHandler = handler;

this.length = length;

}


public void run(){



for(int i=0; i<this.length;i++){


Bundle bundle = new Bundle();

bundle.putInt("i", i);

Message msg = mHandler.obtainMessage();

msg.setData(bundle);

mHandler.sendMessage(msg);

this.sleep(100);

}


}

}


추가. 스레드에서 for문을 돌리는 것이 무식한 짓이었던 듯. 각 로딩당 스레드를 생성하는 것이 나을 듯하다. 퍼포먼스의 저하가 우려된다면, 스레드 작업관리 큐를 만들어 처리하는 것이 좋을 듯.



Posted by tenn
,

[Android] SeekBar

Android 2012. 6. 27. 11:55




    SeekBar seekbar = new SeekBar(this);

 

   

    android.view.ViewGroup.LayoutParams params = new LayoutParams(200, 30);

    //width and height

   

    seekbar.setLayoutParams(params);

    seekbar.setMax(200);

    

       

    seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

   

                public void onStopTrackingTouch(SeekBar seekBar) {

                }

                public void onStartTrackingTouch(SeekBar seekBar) {

                }

                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                //when components value is changed...

                }

               

          });







Posted by tenn
,

[Android] prev button

Android 2012. 6. 26. 10:24

Prev Button

단말의 돌아가기 버튼을 눌렀을 때의 핸들러.


public boolean onKeyDown(int keyCode, KeyEvent event) {

    if ((keyCode == KeyEvent.KEYCODE_BACK)) {

        Log.d(this.getClass().getName(), "back button pressed");

    }

    return super.onKeyDown(keyCode, event);

}






Posted by tenn
,

[Android] ImageButton

Android 2012. 6. 25. 09:59



ImageButton의 Bitmap Recycle


((BitmapDrawable)imageBtn.getDrawable())

.getBitmap().recycle();


Posted by tenn
,



기본 브라우저 띄우기


Intent i = new Intent(Intent.ACTION_VIEW); 

Uri u = Uri.parse(url); 

i.setData(u); 

startActivity(i);


카메라


 Intent i = new Intent();

  i.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
  startActivityForResult(i, TAKE_CAMERA);


갤러리


Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  

intent.setType("image/*");

startActivityForResult(intent, 10);



기본 카메라 어플로 사진 찍은 후, 사진 받기


기본어플 사용하기



Posted by tenn
,