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
,

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


/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
,

[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
,

[Android] WebView

Android 2012. 6. 19. 17:19




Manifest에서 인터넷의 유저권한 지정.


android.permission.INTERNET





private class WebViewClientClass extends WebViewClient { 

        @Override

        public boolean shouldOverrideUrlLoading(WebView view, String url) { 

            view.loadUrl(url); 

            return true

        } 

    }


void setLayout(){

WebView webView = (WebView)findViewById(R.id.webView);

webView.getSettings().setJavaScriptEnabled(true);

webView.loadUrl("http://www.google.com");

webView.setWebViewClient(new WebViewClientClass());

}






WebView에 HTML표시



WebView wv; 

String html = " <font color='red'><b> 출력문자 </font>"


//wv.loadData(html, "text/html""UTF-8");   //Galaxy Nexus에서 문자가 깨지는 현상이 있었음.

wv.loadDataWithBaseURL(null, html, "text/html""UTF-8"null);  




자바스크립트 실행시켜 결과값 받기



- (NSInteger) getOne{

    NSInteger one = [[informationWebView stringByEvaluatingJavaScriptFromString:

              @"(function() { return 1; }) ()"] integerValue];


    return one;

}









Posted by tenn
,

[Android] Layout xml

Android 2012. 6. 18. 10:54



비율로 넓이/높이 지정


android:layout_height="0dip"  // 혹은 width

android:layout_weight="84"  // 값의 합은 100




RelativeLayout


android:background="#ffffff"    // Layout Color

android:textColor="#000000"     // Text Color

android:textSize="10sp"

android:padding...="10dp"



Separator   선


<View

    android:layout_width="fill_parent"

    android:layout_height="1dp"

    android:background="@android:color/black"/>

    






Posted by tenn
,






1. 화면이동할 곳의 Layout 생성


second.xml


2. Android Manifest에서 Activity 생성



Application Nodes > add... > name?


3. Layout과 Activity 연결



setContentView(R.layout.second);  //xml file name


4. 화면 전환 코드



 // 전환시


 Intent intent = new Intent(HelloWorldActivity.this, SecondActivity.class);

 startActivity(intent);


//복귀시

finish();






Posted by tenn
,

[Android] AlertDialog

Android 2012. 6. 15. 13:28

Dialog 메시지를 HTML


        AlertDialog.Builder ab = null;

                ab = new AlertDialog.Builder( HelloAndroid2Activity.this );

                ab.setMessage( Html.fromHtml("<b><font color=#ff00ff> HTML View</font></b><br>Android.com"));

                ab.setPositiveButton(android.R.string.oknull);

                ab.setTitle( "Basic Alert Dialog" );

                 ab.show();




OK/Cancel Dialog


AlertDialog.Builder closeConfirm = new AlertDialog.Builder(xxxActivity.this);

closeConfirm.setTitle(title);

closeConfirm.setMessage(msg );

closeConfirm.setNegativeButton("OK",

                                      new DialogInterface.OnClickListener() {

          public void onClick(DialogInterface dialog, int which) {

           

          }

    });

    closeConfirm.setPositiveButton("cancel",

                                      new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {

              return;

    }

    });

    closeConfirm.show();





HTML 사용시 개행


confirm.setMessage("ブラウザで開きます。"+"\n"+"よろしいですか。");





배경을 눌러 다이어로그가 사라지는 것을 방지하려면



closeConfirm.setCancelable(false); // 취소불가







< 참조 URL >

http://utime.blog.me/150091024547



Posted by tenn
,

[Android] Button

Android 2012. 6. 15. 13:22





버튼 기본 조작 / 버튼 클릭시 타이틀 바꾸기


import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.view.View.OnClickListener;


public class HelloAndroid2Activity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

    

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

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

        

        btn1.setOnClickListener(

             new OnClickListener(){

                 public void onClick(View v){

                     if(((Button)v).getText().equals("clicked!")){

                         ((Button)v).setText("Button");

                     }else{

                        ((Button)v).setText("clicked!");

                     }

                }

            }

        );

        

    }

}







Posted by tenn
,