Android 사용자 정의 구성 요소 로 컬 그림 과 카메라 사진 가 져 오기
안 드 로 이 드 는 오랫동안 이런 효과 가 있 는 제3자 구성 요 소 를 찾 지 못 했 습 니 다.결국 찾기 가 귀 찮 으 니 스스로 이 효 과 를 실현 하 는 것 이 좋 겠 습 니 다.
그림 을 선택 하면 그림 을 편집 할 수 있 습 니 다.
물론 코드 에 완선 되 지 않 은 부분 이 많 습 니 다.저 는 다음 에 이 구성 요 소 를 계속 보완 하 겠 습 니 다.
오픈 소스 커 뮤 니 티 에 올 라 왔 습 니 다.스타 에 오신 걸 환영 합 니 다.
데모 소스 코드:전송 문
디자인 에서 부 딪 힌 문제 와 해결 사고
1.어떻게 플러스 그림 을 GridView 맨 뒤에 표시 합 니까?
우선 GridAdapter 구조 방법 을 호출 할 때 추가 그림 을 불 러 옵 니 다.
/**
*
* @param context
* @param imagesum
*/
public GridAdapter(Context context, int imagesum) {
this.context = context;
this.imageSum = imagesum;
//
mAddBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_add_image);
}
그리고 getCount()방법 에 그림 데이터 집합 에 1 을 추가 하고 이 위치 에 플러스 그림 을 추가 합 니 다.
@Override
public int getCount() {
// ,
return imageItemData == null ? 0 : imageItemData.size() + 1;
}
마지막 으로 getView()방법 에서 그림 을 표시 할 때마다 데이터 집합 중의 요소 수량 을 판단 하고 데이터 집합 수량 이 position 보다 많 으 면 플러스 그림 을 표시 해 야 한 다 는 것 을 나타 낸다.
if (imageItemData != null && imageItemData.size() > position) {
//
} else {
//
}
이렇게 하면 플러스 이미지 가 GridView 마지막 item 에 계속 있 음 을 보증 할 수 있 습 니 다.2.삭제 단 추 를 표시 하 는 방법
item 레이아웃 에서 그림 의 오른쪽 상단 에 삭제 단 추 를 덮어 쓰 고 Adapter 에서 이 그림 의 표시 와 숨 김 을 처리 합 니 다.
/** true= */
private boolean showImageClear = false;
//
/**
*
* @param clear
*/
public void setClearImgShow(boolean clear) {
showImageClear = clear;
}
/**
*
* @return true=
*/
public boolean getClearImgShow() {
return showImageClear;
}
삭제 단 추 는 기본적으로 표시 되 지 않 습 니 다.사용자 가 그림 을 길 게 누 르 면 표 시 됩 니 다.
//
mGridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (!(position == gridAdapter.imageItemData.size())) {
//
if (!gridAdapter.getClearImgShow()) {
gridAdapter.setClearImgShow(true);
gridAdapter.notifyDataSetChanged();
}
}
// true,
return true;
}
});
클릭 이벤트 의 길 이 를 차단 하고 반환 값 을 true 로 설정 해 야 합 니 다.클릭 이벤트 의 감청 도 설정 되 어 있 기 때문에 이 벤트 를 차단 하지 않 으 면 이벤트 가 끝 난 후에 클릭 이 벤트 를 동시에 실행 합 니 다.마지막 으로 중요 한 것 은 GridAdapter 클래스 의 getView 방법 에서 제어 합 니 다.getClearImgShow 방법 으로 그림 을 삭제 할 때 표시 할 지 여 부 를 가 져 옵 니 다.true 로 돌아 가면 표시 되 고 애니메이션 인 스 턴 스 를 가 져 와 그림 이 애니메이션 효 과 를 실행 하도록 합 니 다.
if (imageItemData != null && imageItemData.size() > position) {
//
// , true ,
if (getClearImgShow()) {
holder.imgclear.setVisibility(View.VISIBLE);
CustomRotateAnim anim = CustomRotateAnim.getCustomRotateAnim();
anim.setDuration(300);
anim.setRepeatCount(2);
anim.setInterpolator(new LinearInterpolator()); //
holder.img.startAnimation(anim);
} else {
// ,
holder.img.clearAnimation();
holder.imgclear.setVisibility(View.GONE);
}
holder.img.setImageBitmap(PhotoBitmapUtil.getCompressPhoto(imageItemData.get(position)));
} else {
...... ......
}
3.그림 이 최대 수 에 이 르 렀 을 때 추가 단 추 를 숨 기 는 방법GridAdapter 를 사용 할 때 호출 자 는 최대 그림 수 를 입력 해 야 합 니 다.
gridAdapter = new GridAdapter(MainActivity.this, 8);
mGridView.setAdapter(gridAdapter);
그리고 GridAdapter 에서 이 최대 그림 수 를 받 고 getView()방법 에서 플러스 그림 의 표 시 를 관리 합 니 다.
if (imageItemData != null && imageItemData.size() > position) {
//
...... ......
} else {
//
//
if (imageItemData.size() != imageSum) {
holder.imgclear.setVisibility(View.GONE); //
holder.img.clearAnimation(); //
holder.img.setImageBitmap(mAddBitmap);
}
}
"gridAdapter.getCount()-1"은 우리 가 플러스 그림 을 추가 할 때 1 을 추 가 했 기 때문에 사용 할 때 1 을 줄 여야 합 니 다.
//
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ,
if (gridAdapter.getClearImgShow()) {
gridAdapter.setClearImgShow(false);
gridAdapter.notifyDataSetChanged();
} else {
if (gridAdapter.getCount() - 1 == position) {
//
if (!(gridAdapter.imageItemData.size() == gridAdapter.imageSum)) {
selectPhoto.showPopupSelect(mGridView);
}
} else {
popupViewGridPhoto(position);
}
}
}
});
4.그림 을 불 러 올 때 메모리 소모량 을 줄 이 는 방법GridView 에 그렇게 많은 그림 을 표시 하려 면 여러 그림 을 압축 처리 해 야 합 니 다.그렇지 않 으 면 OOM 오류 가 발생 하기 쉽 습 니 다.
여기 서 품질 압축 을 통 해 그림 을 불 러 오 는 메모리 크기 를 낮 춥 니 다.
/**
* 1/5
*
* @param path
* @return
*/
public static Bitmap getCompressPhoto(String path) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 5; //
Bitmap bmp = BitmapFactory.decodeFile(path, options);
options = null;
return bmp;
}
다른 방식 으로 도 이 블 로 그 를 참고 할 수 있 습 니 다<Android 메모리 넘 침 방지(Out of Memory)방법 요약>5.일부 휴대 전화 가 사진 을 찍 은 후 사진 이 회전 하 는 문 제 를 어떻게 방지 합 니까?
테스트 에서 일부 삼 성 휴대 전 화 는 사진 을 촬영 한 후 90 도 회전 시 켰 다.이 디자인 은 정말 구덩이 이다.이 를 위해 서 는 이 문 제 를 처리 해 야 한다.사진 을 찍 을 때마다 그림 의 회전 각 도 를 얻어 야 한다.그림 이 회전 되면 다시 돌려 야 한다.
이 블 로 그 를 참고 할 수 있 습 니 다.
<안 드 로 이 드,일부 휴대 전화 사진 촬영 후 획득 한 사진 회전 문제 해결>
6.그림 을 좌우 로 흔 드 는 방법
그림 이 좌우 로 흔 들 리 는 효 과 를 실현 하려 면 애니메이션 을 사용자 정의 해 야 합 니 다.
이 블 로그 참조 가능
'안 드 로 이 드 사용자 정의 애니메이션,보기 흔 들 림 효과 구현'
여기 먼저 이렇게 많은 것 을 소개 하 겠 습 니 다.상세 한 해석 코드 주석 에 모두 있 으 니 더 이상 말 하지 않 겠 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.