2016-09-14 102 views
1

我想改变使用按钮点击imageview的背景。点击每个按钮都需要旋转背景。Android更改Imageview与按钮点击

问题:我的应用程序代码编译正常,但单击按钮时崩溃。此外,日志显示了我们创建它的实例的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的图像。这在以前的任何问题中都没有涉及。

更新:对于任何试图使用imageview交换背景图像的人,如问题中所述。请不要这样做。在调试时,您需要经历很多内存使用和崩溃。

改为使用ImageSwitcher。这使您的视图具有全屏幕背景。您可以从可绘制资源数组中进行选择,然后使用按钮进行随机播放。

+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