마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ImageView 갱신이 안되는데 뭘 해야 되나요?

0 추천
ImageView 갱신이 안되는데 어떻게 하면 되나요?
 
 
화면에 ImageView와 바로 아래에 버튼이 있으며 그 버튼 클릭시 이벤트를 받아서 카메라를 띄우고 사진 찍고 저장하면
그 시점에서 결과를 받아서 생성된 이미지를 ImageView에 보여주게 하는 프로그램입니다.
 
그런데 실행을 해보면 최초 실행후 화면에 ImageView에 이미지가 없을때 버튼을 누르고 사진을 찍고 저장하면
ImageView에 찍은 사진에 제대로 보여지는데
이미지가 있는 상태에서(즉 두번째 부터) 버튼을 누르고 사진을 찍으면 이전 이미지가 남아 있습니다.
 
 
코드상에서 설명을 드리면 <<<<==== 요 라인이 실행이 되고 방금 찍은 사진이미지가 ImageView에 보입니다.
 
그런데 두번째 부터는 디버그를 해봐도 <<<<==== 요 라인이 실행은 되는데 사진이미지는 안바뀝니다...
실제 찍은 사진 이미지는 Tablet에 있는데 안바뀌네요...
 
다시 말씀드리면 최초 ImageView에 이미지가 없을때는 setImageURI()로 설정한 이미지가 제대로 보이는데
이미지가 있는 상태에서 하면 이미지가 이전게 계속 남아 있습니다.
 
ImageView에 이미지를 올리고 갱신을 하려면 어떻게 해야 되는지요?
 
 
아래 제 Code를 옵립니다.
 
 
@Override
public void onClick(View v) {
    if (v.getId() == R.id.picture_button) {
        ......
        startActivityForResult(intent, REQUEST_PICTURE);
    }
}
 
 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
 
    if (resultCode == RESULT_OK) {
    if (requestCode == REQUEST_PICTURE) {
        ((ImageView)findViewById(R.id.picture_image)).setImageURI(Uri.parse(mSrcImageFilePath));    <<<<====
        ((ImageView)findViewById(R.id.picture_image)).invalidate();
        }
    }
}
 
 
참고로 기종은 갤럭시 노트 8.0 이며 Eclipse에서 개발합니다.
 
블랙죠2 (220 포인트) 님이 2014년 8월 8일 질문

2개의 답변

0 추천
mSrcImageFilePath를 새로 찍은 사진 이미지 경로로 업데이트하지 않고 그냥 사용하니 계속 같은 이미지만 표시되지요.
익명사용자 님이 2014년 8월 8일 답변
@Override
public void onClick(View v) {
    if (v.getId() == R.id.picture_button) {
        ......
        mSrcImageFilePath = DBHelper.TEMP_FILE_PATH + "/" + Const.DEFAULT_IMAGE_FILE_PATH;

        Intent intent = new Intent(XXXXXXXX.this, YYYYYYYY.class);
        intent.putExtra(Const.KEY_IMAGE_SAVE_PATH, mSrcImageFilePath);
        ......
        startActivityForResult(intent, REQUEST_PICTURE);
    }
}
실제 코드는 위 처럼 YYYYYY.class 에서 넘겨받은 경로에 촬영된 사진을 저장하고 결과를 리턴합니다.
즉 동일한 경로에 파일을 덮어 씌우고 다시 ImageView에 Load 하는 것입니다.
1. 해당 경로에 실제로 사진이 저장되었는지 확인해보세요.
2. 사진 촬영 후 파일이 저장된 다음 mediascan을 돌려보세요.
사진은 실제로 저장되었습니다. 다른 화면으로 갔다가 다시 이 화면으로 오면 새로 찍은 사진이 보여집니다.

mediascan 은 어떻게 돌리는지요? 제가 안드로이드 초보라... ㅠㅠ
자세한 설명 부탁드립니다. ㅠㅠ
0 추천
public void setImageURI(Uri uri) {
        if (mResource != 0 ||
                (mUri != uri &&
                 (uri == null || mUri == null || !uri.equals(mUri)))) {
            updateDrawable(null);
            mResource = 0;
            mUri = uri;

            final int oldWidth = mDrawableWidth;
            final int oldHeight = mDrawableHeight;

            resolveUri();

            if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
                requestLayout();
            }
            invalidate();
        }
    }

setImageURI 소스를 열어보면 기존 uri와 같은 값을 넣으면 무시됩니다.

다른 값으로 한번 바꿔줘야 됩니다.

setImageURI앞에

setImageResource(0)를 넣어서 해보세요

alkyne (22,960 포인트) 님이 2014년 8월 8일 답변
...