지식메모/안드로이드 Android
-
안드로이드 로딩메세지 띄우기2013.10.27
-
안드로이드 소리/효과음 재생이 안될때 해결책2013.10.24
-
안드로이드 EditText 에디트텍스트 값 남겨두기2013.09.09
-
안드로이드 dip px 변환하기2013.07.23
-
안드로이드 버튼 여러개 쓰기2013.07.21
안드로이드 로딩메세지 띄우기
Oncreate() 부분에
createThreadAndDialog();
추가해주고
밑의 소스를 추가해주면 된다.
private ProgressDialog loagindDialog; // 로딩화면 void createThreadAndDialog() { /* ProgressDialog */ loagindDialog = ProgressDialog.show(this, "다이얼로그 명", "Loading.....", true, false); Thread thread = new Thread(new Runnable() { private static final int LOADING_TIME = 2000; @Override public void run() { // 시간걸리는 처리 handler.sendEmptyMessageDelayed(0, LOADING_TIME); } }); thread.start(); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { loagindDialog.dismiss(); // 다이얼로그 삭제 // View갱신 } };
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 팝업창 만들기(xml 내용 집어넣기) (17) | 2014.01.10 |
---|---|
안드로이드 검색 자동완성 만들기 (0) | 2013.12.19 |
안드로이드 소리/효과음 재생이 안될때 해결책 (0) | 2013.10.24 |
안드로이드 레이아웃 버튼 보이기 숨기기 (1) | 2013.09.22 |
안드로이드 EditText 에디트텍스트 값 남겨두기 (0) | 2013.09.09 |
안드로이드 소리/효과음 재생이 안될때 해결책
soundpool을 이용한 간단한 소리나 효과음 재생하는 방법 링크
↓↓↓↓↓↓
그런데 이거대로 했는데 소리가 안났다.
검색을 해보니 나와 같은 증상을 겪은 사람들이 올린 글의 댓글에 해결책을 찾았다.
여기에 해결책이 있었다.
↓↓↓↓↓↓
http://www.androidpub.com/1228909
천상룡섬님과 커널제로님의 해결책이었는데
원인은
"해당 문제는 말 그대로 sound pool이 음원 재생 전 load 단계에서 준비가 되지 않아 발생한 문제입니다."
라고 한다.
그래서 커널제로님이 그 해결코드를 올려주셨는데 load가 될때까지 sleep으로 시간을 주었다.
해보니까 소리가 났다!!
이런 분들 정말 좋으신 분들이다.
복 받으시길..
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 검색 자동완성 만들기 (0) | 2013.12.19 |
---|---|
안드로이드 로딩메세지 띄우기 (0) | 2013.10.27 |
안드로이드 레이아웃 버튼 보이기 숨기기 (1) | 2013.09.22 |
안드로이드 EditText 에디트텍스트 값 남겨두기 (0) | 2013.09.09 |
안드로이드 Spinner(스피너) 값 전달하기 (11) | 2013.08.29 |
안드로이드 레이아웃 버튼 보이기 숨기기
안드로이드에서 레이아웃이나 버튼 이미지 뷰 등등 xml에서 제어 가능한 부분을 조건에 따라 보여주고 숨길 수 있는 방법이 있었다.
layout.setVisibility(View.VISIBLE);
해당 뷰를 보여줌
layout.setVisibility(View.INVISIBLE);
해당 뷰를 안 보여줌(공간은 존재)
layout.setVisibility(View.GONE);
해당 뷰를 안 보여줌(공간마저 감춤)
INVISIBLE과 GONE의 차이는 공간을 보여주느냐 안 보여주느냐의 차이이다.
예를 들면 1 2 3 4 5 의 숫자가 있을때 3을 숨기려고 한다면
INVISIBLE은 1 2 " " 4 5 이런 식으로 3은 없지만 자리는 남아있고
GONE은 1 2 4 5 이런 식으로 3과 공간 모두 숨기게 된다.
사용 예로
LinearLayout layout = (LinearLayout) findViewById(R.id.first); LinearLayout layout2 = (LinearLayout) findViewById(R.id.second); LinearLayout layout3 = (LinearLayout) findViewById(R.id.third); switch (checkedId) { case R.id.button: layout.setVisibility(View.VISIBLE); layout2.setVisibility(View.INVISIBLE); layout3.setVisibility(View.GONE);
이렇게 사용하면 id가 button 인 버튼을 누르면
id가 first인 레이아웃은 보여지고
second 레이아웃은 보이지 않고 그냥 빈 공간만 나오게 되며
third 레이아웃은 아예 삭제된듯이 숨겨지게 된다.
그리고 버튼을 선택하기전에 초기상태에서 숨기려면 직접 xml 파일로 가서 해당 레이아웃에
android:visibility="gone"
옵션을 주면 처음부터 보여지지 않게 된다.
레이아웃 뿐만 아니라 버튼이나 이미지 뷰 텍스트 뷰 등등 여러가지도 적용할 수 있다.
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 로딩메세지 띄우기 (0) | 2013.10.27 |
---|---|
안드로이드 소리/효과음 재생이 안될때 해결책 (0) | 2013.10.24 |
안드로이드 EditText 에디트텍스트 값 남겨두기 (0) | 2013.09.09 |
안드로이드 Spinner(스피너) 값 전달하기 (11) | 2013.08.29 |
안드로이드 dip px 변환하기 (0) | 2013.07.23 |
안드로이드 EditText 에디트텍스트 값 남겨두기
안드로이드 EditText 에디트텍스트 값 남겨두기
다음 액티비티로 넘어갔다가 다시 전 액티비티로 돌아올 때 입력했던 EditText 값을 그대로 놔두고 싶다면
intent 호출 부분에
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
finish();
finish(); 이걸 지워주면 된다.
액티비티 종료 코드를 없애주면 되는 것이다.
난 예제만 보고 따라하느라 그냥 썼다가 값이 안 남길래 삽질을 했었다.
알고보니 간단한 거였다..
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 소리/효과음 재생이 안될때 해결책 (0) | 2013.10.24 |
---|---|
안드로이드 레이아웃 버튼 보이기 숨기기 (1) | 2013.09.22 |
안드로이드 Spinner(스피너) 값 전달하기 (11) | 2013.08.29 |
안드로이드 dip px 변환하기 (0) | 2013.07.23 |
안드로이드 버튼 여러개 쓰기 (0) | 2013.07.21 |
안드로이드 Spinner(스피너) 값 전달하기
스피너를 이용하여 값을 전달한 후 값에 따른 이미지를 출력하였다.
string.xml에 스피너에 쓰일 목록을 만들어둔다.
<string name="season">시즌</string> <string name="season_prompt">시즌 선택</string> <string-array name="season_array"> <item>봄</item> <item>여름</item> <item>가을</item> <item>겨울</item> </string-array>
그 다음 send.xml
<Spinner android:id="@+id/spinner_season" <!--스피너 아이디--> android:layout_width="wrap_content" android:layout_height="wrap_content" android:prompt="@string/season_prompt"<!-- string.xml에서 작성한 목록 --> android:layout_marginRight="10dp" />
이렇게 스피너를 만들어준다.
그리고 SendActivity.java 에서 스피너 값을 보내주자 OnCreate 부분에
Spinner spinner = (Spinner)findViewById(R.id.spinner_season);//send.xml의 스피너 아이디 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.season_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter);
이렇게 스피너를 선언해주고 Onclick메소드에 스피너 값을 인텐트에 태워 보낸다.
String str_season = spinner.getSelectedItem().toString(); Intent it3 = new Intent(this,ReceiveActivity.class); it3.putExtra("it3_season", str_season); //it3_season 이라는 스트링으로 str_season 값을 넘긴다. startActivity(it3);
이제 스피너 값에 따른 이미지를 출력하기 위해 receive.xml 에
이미지 뷰를 만들었다
<ImageView android:id="@+id/season_year" android:layout_width="wrap_content" android:layout_height="wrap_content" />
이제 ReceiveActivity.java 에서 받아보자.
마찬가지로 OnCreate 부분에
Intent it3=getIntent(); //인텐트를 받아오고 String str_season= it3.getStringExtra("it3_season"); //it3_season으로 보내온 값을 str_season에 저장 ImageView season = (ImageView)findViewById(R.id.season_year); //사진을 출력할 이미지뷰 if(str_season.equals("봄")){ //str_season 값이 봄이라면 BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.spring); //봄 사진 가져와서 season.setImageDrawable(img_season);//봄 사진 출력 }else if(str_season.equals("여름")){ BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.summer); season.setImageDrawable(img_season); }else if(str_season.equals("겨울")){ BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.autumn); season.setImageDrawable(img_season); }else if(str_season.equals("가을")){ BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.winter); season.setImageDrawable(img_season); }
여기서 애를 먹었던게 if 값을 그냥 평소 하던대로
if(str_season == "봄") 이런식으로 해줬는데 안되서 찾아보니까 String 값은
str_season.equals("봄")
이런식으로 해줘야 했다.
이제 스피너로 봄 값이 넘어오면 이미지뷰에 봄 사진을 넣어주고 여름이면 여름사진을 보여준다.
아 소스코드 태그 은근 귀찮네..
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 레이아웃 버튼 보이기 숨기기 (1) | 2013.09.22 |
---|---|
안드로이드 EditText 에디트텍스트 값 남겨두기 (0) | 2013.09.09 |
안드로이드 dip px 변환하기 (0) | 2013.07.23 |
안드로이드 버튼 여러개 쓰기 (0) | 2013.07.21 |
안드로이드 공유하기 기능쓰기 (7) | 2013.07.21 |
안드로이드 dip px 변환하기
기준값
Low density = 120, ldpi
Medium density = 160, mdpi
High density = 240, hdpi
(px -> dip) dip 값 구하기 |
(dip -> px) px 값 구하기 |
dip = px * (160/기준값) (hdpi 기준) dip = ( PX / 3 ) * 2 (hdpi 기준) dip = px * 0.666 |
pixels = dip * (기준값/ 160) (hdpi 기준) px = dip * 1.5 |
이미지를 레이아웃 백그라운드에 넣어줬더니 폰마다 다른 해상도 때문에 테스트 폰보다 큰 폰에서는 이미지가 늘어나는 현상이 발생했다.
그래서 레이아웃크기를 wrap_content로 해준 걸 수치로 고정시켜주었다.
그런데 xml에서는 크기수치를 dp로 주게 되어있는데 나는 dp가 픽셀이랑 같은 수치인 줄 알았다.
테스트 해보니 그게 아니었다.
그래서 변환 공식을 찾았고 계산을 해서 직접 때려넣었다.
물론 소스 상에 변환 코드를 넣어서 구현할 수도 있지만 귀찮기도 하고 실력부족으로...
(기준 값은 hdpi=240으로 잡고 계산했다.)
이미지 사이즈는 픽셀기준이라 그 수치를 공식에 대입해서 나온 결과 값을 레이아웃 dp값으로 넣어주었더니
어느 폰에서나 똑같은 크기로 나올 수 있었다.
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 EditText 에디트텍스트 값 남겨두기 (0) | 2013.09.09 |
---|---|
안드로이드 Spinner(스피너) 값 전달하기 (11) | 2013.08.29 |
안드로이드 버튼 여러개 쓰기 (0) | 2013.07.21 |
안드로이드 공유하기 기능쓰기 (7) | 2013.07.21 |
안드로이드 숫자 키보드 띄우기 (0) | 2013.07.20 |
안드로이드 버튼 여러개 쓰기
만약 액티비티를
public class MainActivity extends Activity implements OnClickListener{
이렇게 implements OnClickListener로 선언했다면
onClick 메소드에 xml에서 선언한 버튼의 아이디를 적어주면 된다.
if , else if 로 각 버튼이 눌렸을때 수행할 기능을 넣어준다.
public void onClick(View v){
if(v.getId() == R.id.버튼의 아이디){
... 수행할 기능
}else if(v.getid()== R.id.버튼의 아이디){
..... 수행할 기능
}
소스양식버전
public void onClick(View v){ if(v.getId() == R.id.버튼의 아이디){ ... 수행할 기능 }else if(v.getid()== R.id.버튼의 아이디){ ..... 수행할 기능 }
또는
public class MainActivity extends Activity
그냥 이렇게 선언했다면
OnCreate 부분에서 버튼 별로 수행할 기능을 넣어줘도 된다.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1 = (Button) findViewById(R.id.버튼1의 아이디);
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 수행할 기능소스
}
});
Button btn2 = (Button) findViewById(R.id.버튼2의 아이디);
btn2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 수행할 기능소스
}
});
}
소스양식버전
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn1 = (Button) findViewById(R.id.버튼1의 아이디); btn1.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 수행할 기능소스 } }); Button btn2 = (Button) findViewById(R.id.버튼2의 아이디); btn2.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 수행할 기능소스 } }); }
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 Spinner(스피너) 값 전달하기 (11) | 2013.08.29 |
---|---|
안드로이드 dip px 변환하기 (0) | 2013.07.23 |
안드로이드 공유하기 기능쓰기 (7) | 2013.07.21 |
안드로이드 숫자 키보드 띄우기 (0) | 2013.07.20 |
안드로이드 EditText에 텍스트 집어넣기 (0) | 2013.07.20 |
안드로이드 공유하기 기능쓰기
이미지를 캡쳐해서 저장한 후 공유하기를 통해 이미지를 공유하고 싶었다.
이 공유하기 기능을 사용하면 카톡 페북 미투데이 등등 메뉴가 저절로 나온다.신기방기
Intent intentSend = new Intent(Intent.ACTION_SEND); intentSend.setType("image/*"); intentSend.putExtra(Intent.EXTRA_STREAM, Uri.parse(파일경로)); startActivity(Intent.createChooser(intentSend, "공유")); |
특정파일을 공유하기 위해 다음과 같이 사용했다.
공유하기 버튼을 만들어 그 안에 집어넣었다.
Intent it3=getIntent(); //파일명을 가져오기 위한 인텐트(에디트텍스트에서 이름입력받은 걸 파일명으로 쓰기 위해)
String str_name=it3.getStringExtra("it3_name"); //이름을 가져온다.
File fileRoute = null;
fileRoute = Environment.getExternalStorageDirectory(); //sdcard 파일경로 선언
File files = new File(fileRoute,"/temp/"+str_name+"-.jpeg"); //temp폴더에 이름으로 저장된 jpeg파일 경로 선언
if(files.exists()==true) //파일유무확인
{
Intent intentSend = new Intent(Intent.ACTION_SEND);
intentSend.setType("image/*");
//이름으로 저장된 파일의 경로를 넣어서 공유하기
intentSend.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileRoute+"/temp/"+str_name+"-.jpeg"));
startActivity(Intent.createChooser(intentSend, "공유")); //공유하기 창 띄우기
}else{
//파일이 없다면 저장을 해달라는 토스트메세지를 띄운다.
Toast.makeText(getApplicationContext(), "저장을 먼저 해주세요", Toast.LENGTH_LONG).show();
}
소스양식버전
Intent it3=getIntent(); //파일명을 가져오기 위한 인텐트(에디트텍스트에서 이름입력받은 걸 파일명으로 쓰기 위해) String str_name=it3.getStringExtra("it3_name"); //이름을 가져온다. File fileRoute = null; fileRoute = Environment.getExternalStorageDirectory(); //sdcard 파일경로 선언 File files = new File(fileRoute,"/temp/"+str_name+"-.jpeg"); //temp폴더에 이름으로 저장된 jpeg파일 경로 선언 if(files.exists()==true) //파일유무확인 { Intent intentSend = new Intent(Intent.ACTION_SEND); intentSend.setType("image/*"); //이름으로 저장된 파일의 경로를 넣어서 공유하기 intentSend.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileRoute+"/temp/"+str_name+"-.jpeg")); startActivity(Intent.createChooser(intentSend, "공유")); //공유하기 창 띄우기 }else{ //파일이 없다면 저장을 해달라는 토스트메세지를 띄운다. Toast.makeText(getApplicationContext(), "저장을 먼저 해주세요", Toast.LENGTH_LONG).show(); }
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 dip px 변환하기 (0) | 2013.07.23 |
---|---|
안드로이드 버튼 여러개 쓰기 (0) | 2013.07.21 |
안드로이드 숫자 키보드 띄우기 (0) | 2013.07.20 |
안드로이드 EditText에 텍스트 집어넣기 (0) | 2013.07.20 |
안드로이드 카메라 호출해서 이미지 크롭하기 (0) | 2013.07.20 |