2013-12-18 4 views
1

제목과 관련하여 수십 개의 Q & A를 읽은 후에이 상황에 대한 답을 찾을 수 없습니다.setImageDrawable이 현재 드로어 블을 설정하지 않음

내 응용 프로그램에서 사용자는 한 테이블 레이아웃에서 다른 아이콘으로 다른 아이콘을 드래그하고 있습니다 (아래쪽 테이블 레이아웃은 일종의 "아이콘 키보드"입니다).

위의 표로 아이콘을 드래그하면 (아이콘이 자리 표시 자 이미지를 바꿉니다) 사용자는 계속해서 다른 위치로 드래그 할 수 있습니다.

지금은 첫 부분이 훌륭합니다. "키보드"의 아이콘을 위쪽의 테이블 레이아웃으로 드래그 할 수 있습니다. 하지만 어떤 이유로이 레이아웃 안의 다른 위치간에 드래그하려고하면 아이콘으로 변경되어야하는 imageView는 동일한 드로어 블 (placeholder)과 함께 유지됩니다. 당신이 볼 수있는

public boolean onDrag(View v, DragEvent event) { 
     ImageView imageOnBoard = (ImageView) v; 
     switch (event.getAction()) { 
     case DragEvent.ACTION_DRAG_STARTED: 
       break; 
     case DragEvent.ACTION_DRAG_ENTERED: 
      imageOnBoard.setBackgroundColor(0xFF00FF00); 

     break; 
     case DragEvent.ACTION_DRAG_EXITED: 
      imageOnBoard.setBackgroundColor(color.transparent); 
      imageOnBoard.setOnTouchListener(null); 
     break; 
     case DragEvent.ACTION_DROP:   


     imageOnBoard.setBackgroundColor(color.transparent); 
     TableRow tr1 = (TableRow) imageOnBoard.getParent(); 
     int r=tr1.indexOfChild(imageOnBoard); 
     TableLayout tl1 = (TableLayout) tr1.getParent(); 
     int c=tl1.indexOfChild(tr1); 


     ImageView strategyIcon = (ImageView) (event.getLocalState()); 
     TableLayout source = (TableLayout) strategyIcon.getParent().getParent(); 
     if (source.equals((TableLayout) findViewById(R.id.tableLayout))) 
     { 

      Drawable draw = strategyIcon.getDrawable(); 
      imageOnBoard.setImageDrawable(draw); 

     } 
     else 
     { 

      Drawable draw = strategyIcon.getDrawable(); 
      imageOnBoard.setImageDrawable(draw); 

     } 


     imageOnBoard.setVisibility(View.VISIBLE); 
     imageOnBoard.setOnTouchListener(new MyTouchListener()); 

     break; 
     case DragEvent.ACTION_DRAG_ENDED: 

      break; 

     default: 
     break; 
     } 
     return true; 
    } 

, 나는. 나는 그것을 테스트 "키보드"에서 끌어 상단 레이아웃 내부에 끌어 두 경우 (에 DRAG_DROP 조치를 나누어, 그것은 다른 경우로 이동하지만, 않습니다 드로어 블 오브젝트가 "갱신 전의"것으로 보인다.

이 도와주세요!

내가 지금 상단 레이아웃에서, 두 번째 시간 동안 드로어 블 (getDrawable)를 추출하는 동안 문제가 있음을 이해하고, 나는를받지 않습니다 현재 드로어 블이면서 원래 드로잉은 어떻게 처리 할 수 ​​있습니까?

답변

0

으로 setImageDrawable() 메소드가 API 레벨 16에서 사용되지 않으므로이 메소드는 작동하지 않습니다. 대신 당신은 http://developer.android.com/reference/android/view/View.html#setBackground(android.graphics.drawable.Drawable)

+0

문제가 해결되지 않았습니다. 게다가이 방법은 두 번째 경우에서 작동하므로 첫 번째 경우에는 왜 작동하지 않아야합니까? – Maoritzio

+0

기기가 API 레벨 15 이상인 경우 기기에 따라 다르면 첫 번째 사례가 실행되고 두 번째 사례는 실행됩니다. –

+0

내 의도는 내 코드의 else 문 (사용자가 제안한 대답이 아님)이 실행되고 정상적으로 작동하고 "if"문과 동일하기 때문에 둘 다 작동하지 않아야하는 이유는 무엇입니까? – Maoritzio

0

는 심판 #에 대한 다음과 같은 방법

@SuppressWarnings("deprecation") 
    private void setRes(ImageView iv,Drawable drawable){ 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) 
      iv.setBackground(drawable); 
     else 
      iv.setBackgroundDrawable(drawable); 
    } 

를 그냥 간단한 오류가 아닙니다 사용할 수 있습니까? 여기에서는 "드로잉"드로어 블을 얻을 수 있지만 아무 것도하지 않습니다. 아마 교체 :

if (source.equals((TableLayout) findViewById(R.id.tableLayout))) 
     { 
      //imageOnBoard.setImageResource(strategyIcon.getId()); 
      Drawable draw = strategyIcon.getDrawable(); 
      imageOnBoard.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher)); 

     } 

작성자 :

if (source.equals((TableLayout) findViewById(R.id.tableLayout))) 
      { 
       Drawable draw = strategyIcon.getDrawable(); 
       imageOnBoard.setImageDrawable(draw); 

      } 
+0

죄송합니다. 잘못된 코드를 붙여서 지금 편집했습니다. – Maoritzio

0

문제는 이전 드로어 블을 제공 getDrawable와 acctualy했다. 이 태그 사용하여 수정되었습니다 :

if (source.equals((TableLayout) findViewById(R.id.tableLayout))) //in case this icon is dragged from the board 
     { 


      Drawable draw = (Drawable) strategyIcon.getTag(); 
      imageOnBoard.setImageDrawable(draw); 
      imageOnBoard.setTag(draw); 

     } 




     else               //in case this icon is dragged from the menu 
     { 
      Drawable draw = strategyIcon.getDrawable(); 
      imageOnBoard.setImageDrawable(draw); 

      imageOnBoard.invalidateDrawable(draw); 
      imageOnBoard.setTag(draw); 

     } 
1
내가 image1.setImageDrawable(add);가 가끔 작동하지 않는 사용하여 이미지 뷰에 이미지를 설정할 때이 같은 문제가, 나중에 내가 이미지를 설정하는 글라이드를 사용 만난

을 : 예를 들어, Glide.with(Activity.this).load(R.drawable.add).into(image1); 그럼 잘 동작합니다.

0

동일한 문제가 생겼고 해결책은 "setImageDrawable"앞에 이미지의 LayoutParams를 설정하는 것이 었습니다. 외관상 drawable이 크기가없는 것처럼 (특히 사용자 정의 drawable 또는 일부 아이콘 인 경우) 화면의 너비와 높이가 길이가 0으로 표시됩니다. 따라서 솔루션은 다음과 같습니다.

SemiCircleDrawable d = new SemiCircleDrawable(...); // just a custom drawable 

myImage.setLayoutParams(newLinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
myImage.setImageDrawable(d); 
관련 문제