2016-09-14 2 views
1

버튼 클릭을 사용하여 imageview의 배경을 변경하려고합니다. 각 버튼을 클릭하면 배경이 회전해야합니다.안드로이드 단추로 이미지 뷰 변경 클릭

문제점 : 응용 프로그램 코드는 잘 컴파일되지만 버튼을 클릭하면 충돌이 발생합니다. 또한 로그에는 인스턴스를 생성 한 이미지 뷰에 대한 지점이 표시됩니다.

내가 코드 내에서 문제를 찾을 수있는 방법

여기 activity.xml 내 코드입니다.

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.devnami.maya.maya.MainActivity" 
> <ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/forest" 
    android:adjustViewBounds="true" 
    android:scaleType="fitXY" 
    android:id="@+id/view1" 
    /> <ImageButton 
     android:id="@+id/button1" 
     android:layout_width="45dp" 
     android:layout_height="45dp" 
     android:textStyle="bold" 
     android:textColor="#FFFFFF" 
     android:background="@drawable/flower" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     /> </RelativeLayout> 

그리고 여기에는 이전에 유래 여기에 질문을 게시에 내 질문은 관련이없는 참고 activitymain.java

public class MainActivity extends AppCompatActivity { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ImageButton one = (ImageButton) this.findViewById(R.id.button1); 
    ImageButton one = (ImageButton) this.findViewById(R.id.button1); 
    one.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
     ImageView iv =(ImageView)this.findViewById(R.id.view1) 
      int i = 0; 
      if (i == 0) { 
       iv.setImageResource(R.drawable.mountain)); 
       i++; 
      } else if (i == 1) { 
       iv.setImageResource(R.drawable.seashore3); 
       i++; 
      } else if (i == 2) { 
       iv.setImageResource(R.drawable.night1); 
       i++; 
      } else if (i == 3) { 
       iv.setImageResource(R.drawable.forest); 
       i = 0; 
      } 
     } 
    }); 

내 코드입니다. 여기에서 달성하고자하는 것은 buttonclick을 사용하여 이미지 뷰의 이미지를 변경하는 것입니다. 이전에 묻지 않은 질문에는이 내용이 적용되지 않았습니다.

업데이트 : 질문에 설명 된대로 imageview를 사용하여 배경 이미지를 바꾸려고하는 모든 사람에게 적합합니다. 제발 그만 하지마. 디버깅하는 동안 많은 메모리 사용량과 충돌이 발생합니다.

대신 ImageSwitcher를 사용하십시오. 이렇게하면보기가 전체 화면 배경을 가질 수 있습니다. drawable 리소스의 배열 중에서 선택하고 버튼을 사용하여 순서 섞기를 할 수 있습니다.

+0

안녕 .show 로그 –

+1

어디가 충돌한다 나? 또한 해당 활동의 일부 코드가 누락되었습니다. 어디에서'onCreate'를 대체하고 있습니까? – ono

답변

2

나는 당신의 오류가

ImageView iv =(ImageView)this.findViewById(R.id.view1) 

가 활동하지만 OnClickListener를하지 않습니다 여기에 확신 해요. ImageView을 필드에 추출하거나 활동 인스턴스의 인스턴스를 보유하는 필드를 사용하십시오.

전체 예 :

public class MainActivity extends AppCompatActivity { 

ImageView iv; 

super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ImageButton one = (ImageButton) this.findViewById(R.id.button1); 
    ImageButton one = (ImageButton) this.findViewById(R.id.button1); 
    iv =(ImageView)this.findViewById(R.id.view1) 
    one.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      int i = 0; 
      if (i == 0) { 
       iv.setImageResource(R.drawable.mountain)); 
       i++; 
      } else if (i == 1) { 
       iv.setImageResource(R.drawable.seashore3); 
       i++; 
      } else if (i == 2) { 
       iv.setImageResource(R.drawable.night1); 
       i++; 
      } else if (i == 3) { 
       iv.setImageResource(R.drawable.forest); 
       i = 0; 
      } 
     } 
    }); 
0

그냥이 하나의 코드를 교체

 public class MainActivity extends AppCompatActivity { 
     int i = 0; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
ImageButton one = (ImageButton) this.findViewById(R.id.button1); 
ImageButton one = (ImageButton) this.findViewById(R.id.button1); 
one.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
    ImageView iv =(ImageView)this.findViewById(R.id.view1); 

     if (i == 0) { 
      iv.setImageResource(R.drawable.mountain)); 
      i++; 
     } else if (i == 1) { 
      iv.setImageResource(R.drawable.seashore3); 
      i++; 
     } else if (i == 2) { 
      iv.setImageResource(R.drawable.night1); 
      i++; 
     } else if (i == 3) { 
      iv.setImageResource(R.drawable.forest); 
      i = 0; 
     } 
    } 
}); 
+0

나는 그가 동일한 문제를 여기에 실행 것이라고 생각, 내 대답을 참조하십시오 – Aerim

+0

아니 당신은 내가 작동하지 않습니다 로컬 변수로 내가 만들었습니다. –

+0

다시 보시면 클래스 필드로 생성 된 것을 볼 수 있습니다. – Aerim