레이블이 android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 android인 게시물을 표시합니다. 모든 게시물 표시

2019년 10월 3일 목요일

ImageView를 사용하여 toggle 기능 사용하기, android

즐겨 찾기 기능을 위해 ImageView를 사용한 Toggle기능을 구현.

먼저 사용할 이미지를 준비한다.
https://www.iconfinder.com/search/?q=star&from=homepage&type=vector&price=free


res/drawable/selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_activated="true"
        android:drawable="@drawable/ic_star_24dp" />
    <item
        android:drawable="@drawable/ic_star_border_24dp" />
</selector>

ImageView
<ImageView
  android:src="@drawable/selector"
  ..
  .. />

ImageView - onClick

star.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View view) {
        view.setActivated(!view.isActivated());
    }
});

2019년 8월 1일 목요일

Firebase, Firebase storage에 업로드 및 업로드파일 다운로드 링크 가져오기

로컬파일에서 업로드

1
2
// AndroidManifest.xml에 사용권한 추가
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 내부 사진첩 열기
ImageView imageView = findViewById(R.id.img);
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(MediaStore.Images.Media.CONTENT_TYPE);
        startActivityForResult(intent, 1000);
    }
});

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    switch (requestCode) {
        case 1000:
            // 선택한 이미지를 ImageView에 표시
            imageView.setImageURI(data.getData());
            // 이미지 내부경로
            imagePath = getPath(data.getData());
            break;
    }
}

private String getPath(Uri uri) {
    String [] proj = {MediaStore.Images.Media.DATA};
    CursorLoader cursorLoader = new CursorLoader(this, uri, proj, null, null, null);

    Cursor cursor = cursorLoader.loadInBackground();
    int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

    cursor.moveToFirst();

    return cursor.getString(index);
}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 전역변수 선언
private FirebaseFirestore db;
private FirebaseStorage storage;
private StorageReference storageRef;
private StorageReference recvRef;

// 초기화 및 Storage 버킷설정
private void init() {
    db = FirebaseFirestore.getInstance();
    storage = FirebaseStorage.getInstance("xxx-xxx.appspot.com");
    storageRef = storage.getReference();
}


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Uri file = Uri.fromFile(new File(companyImgPath));
// 업로드 폴더 지정
recvRef = storageRef.child("company/" + file.getLastPathSegment());
recvRef.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

        // 업로드 완료후 다운로드 경로 가져오기
        recvRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                // 다운로드 경로 표시 (uri.toString())
                Log.d(TAG, uri.toString());
            }
        });
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        Log.d(TAG, "Image Upload failure.");
    }
});

2019년 7월 31일 수요일

Firebase, Coustom objects 사용

Coustom 객체를 사용한 조회

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
db.collection("company")
      .get()
      .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
           @Override
           public void onComplete(@NonNull Task<QuerySnapshot> task) {
                 if (task.isSuccessful()) {
                      for (QueryDocumentSnapshot document : task.getResult()) {
                          companyList.add(document.toObject(Company.class));
                      }
                  } else {
                      Log.w(TAG, "Error getting company documents.", task.getException());
                  }
              }
        });

1
2
// 조회된 데이터 매핑
Company company = document.toObject(Company.class);


Coustom 객체를 사용한 추가

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
db.collection("company")
        .add(company)   // 객체를 넣어준다.
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                finish();
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Failure save");
            }
       });

2019년 7월 26일 금요일

circularImageView-안드로이드에서 간단하게 원형 이미지 생성

Web site
https://github.com/lopspower/CircularImageView

build.gradle(Module:app)에 추가
1
2
3
dependencies {
    implementation 'com.mikhaellopez:circularimageview:4.0.1'
}

Properties
  • app:civ_circle_color (color) -> default WHITE
  • app:civ_border (boolean) -> default true
  • app:civ_border_color (color) -> default WHITE
  • app:civ_border_width (dimension) -> default 4dp
  • app:civ_shadow (boolean) -> default false
  • app:civ_shadow_color (color) -> default BLACK
  • app:civ_shadow_radius (float) -> default 8.0f
  • app:civ_shadow_gravity (center, top, bottom, start or end) -> default bottom

XML
1
2
3
4
5
6
7
8
9
<com.mikhaellopez.circularimageview.CircularImageView
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:src="@drawable/image"
        app:civ_border_color="#3f51b5"
        app:civ_border_width="4dp"
        app:civ_shadow="true"
        app:civ_shadow_radius="10"
        app:civ_shadow_color="#3f51b5"/>

JAVA

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
CircularImageView circularImageView = findViewById(R.id.circularImageView);
// Set Circle color for transparent image
circularImageView.setCircleColor(Color.WHITE);
// Set Border
circularImageView.setBorderColor(Color.RED);
circularImageView.setBorderWidth(10);
// Add Shadow with default param
circularImageView.setShadowEnable(true);
// or with custom param
circularImageView.setShadowRadius(15);
circularImageView.setShadowColor(Color.RED);
circularImageView.setBackgroundColor(Color.RED);
circularImageView.setShadowGravity(CircularImageView.ShadowGravity.CENTER);

안드로이드에서 Picasso사용




Last version
https://github.com/square/picasso

build.gradle 추가
1
2
3
dependencies {
    implementation 'com.squareup.picasso:picasso:2.71828'
}



1
Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);

2015년 1월 27일 화요일

개발자옵션이 노출되게 하는 방법, Android

 설정의 시스템에 있는 휴대전화 정보메뉴를 선택한다.

제일 하단에 보이는 빌드번호를 계속 터치하게 되면 개발자가 된다. -_-;

2015년 1월 19일 월요일

디바이스 Display정보얻어오기, Android

public Display getDisplayInfo(Context context){
 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
 Display display = wm.getDefaultDisplay();
 return display;
}

Display 사이즈 정보를 얻기 위한 방법

구글캘린더 이벤트 삭제, Android

private int DeleteCalendarEntry(int entryID) {
    int iNumRowsDeleted = 0;
 
    Uri eventsUri = Uri.parse(getCalendarUriBase()+"events");
    Uri eventUri = ContentUris.withAppendedId(eventsUri, entryID);
    iNumRowsDeleted = getContentResolver().delete(eventUri, null, null);
 
    Log.i(DEBUG_TAG, "Deleted " + iNumRowsDeleted + " calendar entry.");
 
    return iNumRowsDeleted;
}

참고 : http://stackoverflow.com/questions/6924438/how-to-delete-specific-event-in-calendar

설정파일 저장하기, Android

public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        SharedPreferences sp = getApplicationContext().getSharedPreferences("Str", mode);
        SharedPreferences.Editor editSp = sp.edit();
 
        editSp.putString("setting", "1");
}
//mode -  0  : 읽고쓰기
//MODE_WORLD_READABLE : 읽기공유
//MODE_WORLD_WRITEABLE : 쓰기공유

디바이스에 설치되어 있는 어플 찾기, Android

// 카카오톡이 설치되어 있는지 확인
@Override 
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try {
                this.getPackageManager().getPackageInfo("com.kakao.talk", PackageManager.GET_ACTIVITIES);
        } catch (NameNotFoundException e) {
                e.printStackTrace();
                ToastUtil.showShotToast(this, "없음");
        }
        ToastUtil.showShotToast(this, "있음");
}

하드웨어 버튼으로 뒤로가기, Android

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if(keyCode == KeyEvent.KEYCODE_BACK){
 
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }

Activity 클래스의 onKeyDown()을 오버라이드하여 사용.

Using SharedPreference, Android

앱을 개발하면서 간단한 사용자의 설정 정보 또는 무겁지 않은 데이터를 저장할때 사용하면 유용합니다. 저장된 데이터는 앱을 삭제하거나 앱 데이터를 삭제하면 지워지는 데이터 이므로 저장하려는 데이터를 어디에 저장할것인 잘 판단해야 합니다. 데이터 저장 ...