2013-06-13 54 views
0

我特此感谢所有帮助我的人。使用按钮单击连续更改图像Android

我想做一个应用程序,其中有10张图片, 只有一个imageview在主布局和一个按钮。

当我按下按钮,图像更改为下一个。当我再次按下按钮时,它会变成另一个。

我不能做几天。我正在尝试这个;

Main.java;

package com.example.denemeemre; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 


public class Main extends Activity { 
private ImageView hImageViewSemafor; 
public Button hButton; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     hImageViewSemafor = (ImageView)findViewById(R.id.idImageViewSemafor); 
     hButton = (Button) findViewById(R.id.idBtnChangeImage); 
     hButton.setOnClickListener(aButtonChangeImageListener); 

    } 
     View.OnClickListener aButtonChangeImageListener = new OnClickListener() { 

     public void onClick(View v) { 
       // setImageResource will change image in ImageView 
      hImageViewSemafor.setImageResource(R.drawable.r1); 

     } 
    }; 

    public void onCreate1(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     hImageViewSemafor = (ImageView)findViewById(R.id.idImageViewSemafor); 
     hButton = (Button) findViewById(R.id.idBtnChangeImage); 
     hButton.setOnClickListener(bButtonChangeImageListener); 


    } 

    View.OnClickListener bButtonChangeImageListener = new OnClickListener() { 
     public void onClick(View v) { 
       // setImageResource will change image in ImageView 
      hImageViewSemafor.setImageResource(R.drawable.r2); 

     } 
    }; 

    View.OnClickListener cButtonChangeImageListener = new OnClickListener() { 
     public void onClick(View v) { 
       // setImageResource will change image in ImageView 
      hImageViewSemafor.setImageResource(R.drawable.r3); 

     } 
    }; 

    View.OnClickListener dButtonChangeImageListener = new OnClickListener() { 
     public void onClick(View v) { 
       // setImageResource will change image in ImageView 
      hImageViewSemafor.setImageResource(R.drawable.r4); 

     } 
    };  

    View.OnClickListener eButtonChangeImageListener = new OnClickListener() { 
     public void onClick(View v) { 
       // setImageResource will change image in ImageView 
      hImageViewSemafor.setImageResource(R.drawable.r5); 

     } 
    }; 

} 

and main.xml;

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/idImageViewSemafor" 
     android:layout_width="match_parent" 
     android:layout_height="342dp" 
     android:layout_weight="1.04" 
     android:adjustViewBounds="true" 
     android:background="#66FFFFFF" 
     android:maxHeight="91dip" 
     android:maxWidth="47dip" 
     android:padding="10dip" 
     android:src="@drawable/r0" /> 

    <Button 
     android:id="@+id/idBtnChangeImage" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Sonraki" /> 

</LinearLayout> 

UPDATE;

现在它是这样的,从第一张照片后退而崩溃;

该代码;

package com.galerionsekiz; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 


public class Main extends Activity { 

    private ImageView hImageViewPic; 
    private Button iButton, gButton; 

    private int currentImage = 0; 
    int[] images = { R.drawable.r1, R.drawable.r2, R.drawable.r3, R.drawable.r4, R.drawable.r5, R.drawable.r6, R.drawable.r7, R.drawable.r8, R.drawable.r9, R.drawable.r10 }; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     hImageViewPic = (ImageView)findViewById(R.id.idImageViewPic); 
     iButton = (Button) findViewById(R.id.bIleri); 
     gButton = (Button) findViewById(R.id.bGeri); 
     //Just set one Click listener for the image 

     iButton.setOnClickListener(iButtonChangeImageListener); 
     gButton.setOnClickListener(gButtonChangeImageListener); 
    } 
    View.OnClickListener iButtonChangeImageListener = new OnClickListener() { 

     public void onClick(View v) { 
      //Increase Counter to move to next Image 
      currentImage++; 
      currentImage = currentImage % images.length; 

      hImageViewPic.setImageResource(images[currentImage]); 

     } 
    }; 

    View.OnClickListener gButtonChangeImageListener = new OnClickListener() { 

     public void onClick(View v) { 
      //Increase Counter to move to next Image 
      currentImage--; 
      currentImage = currentImage % images.length; 

      hImageViewPic.setImageResource(images[currentImage]); 

     } 
    }; 
} 

主要;

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="fill" 
    android:orientation="vertical" 
    android:weightSum="100" > 

    <ImageView 
     android:id="@+id/idImageViewPic" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="100" 
     android:adjustViewBounds="true" 
     android:background="#66FFFFFF" 
     android:maxHeight="91dip" 
     android:maxWidth="47dip" 
     android:padding="10dip" 
     android:src="@drawable/r0" /> 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <Button 
      android:id="@+id/bGeri" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Önceki" > 
     </Button> 

     <Button 
      android:id="@+id/bIleri" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Sonraki" > 
     </Button> 
    </LinearLayout> 

</LinearLayout> 

有什么建议吗?

+1

是的请粘贴我们的代码。 –

+0

在这里发表您的代码 – Raghunandan

+0

感谢Mocialov鲍里斯:) – eistanbullu

回答

4

您不想为每个不同的图像设置多个onClickListeners。你只需要跟踪当前图像,以便当你点击按钮时,它知道下一个图像。

这段代码应该给你和我的意思的例子。

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 


public class Main extends Activity { 

    private ImageView hImageViewSemafor; 
    private Button hButton; 

    private int currentImage = 0; 
    private int numImages = 10; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     hImageViewSemafor = (ImageView)findViewById(R.id.idImageViewSemafor); 
     hButton = (Button) findViewById(R.id.idBtnChangeImage); 
     //Just set one Click listener for the image 
     hButton.setOnClickListener(aButtonChangeImageListener); 

    } 
    View.OnClickListener aButtonChangeImageListener = new OnClickListener() { 

     public void onClick(View v) { 
      //Increase Counter to move to next Image 
      currentImage++; 
      currentImage = currentImage % numImages 

      //Set the image depending on the counter. 
      switch (currentImage) { 
      case 0: hImageViewSemafor.setImageResource(R.drawable.r1); 
        break; 
      case 1: hImageViewSemafor.setImageResource(R.drawable.r2); 
      break; 
      case 2: hImageViewSemafor.setImageResource(R.drawable.r3); 
      break; 
      case 3: hImageViewSemafor.setImageResource(R.drawable.r4); 
      break; 
      case 4: hImageViewSemafor.setImageResource(R.drawable.r5); 
      break; 
      case 5: hImageViewSemafor.setImageResource(R.drawable.r6); 
      break; 
      case 6: hImageViewSemafor.setImageResource(R.drawable.r7); 
      break; 
      case 7: hImageViewSemafor.setImageResource(R.drawable.r8); 
      break; 
      case 8: hImageViewSemafor.setImageResource(R.drawable.r9); 
      break; 
      case 9: hImageViewSemafor.setImageResource(R.drawable.r10); 
      break; 
      default: hImageViewSemafor.setImageResource(R.drawable.r1);  
      } 

     } 
    }; 
} 

希望这会起作用,但我没有测试过它。

UPDATE

删除了大开关块。

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 


public class Main extends Activity { 

    private ImageView hImageViewSemafor; 
    private Button hButton; 

    private int currentImage = 0; 
    int[] images = { R.drawable.r1, R.drawable.r2, R.drawable.r3, R.drawable.r4, R.drawable.r5, R.drawable.r6, R.drawable.r7, R.drawable.r8, R.drawable.r9, R.drawable.r10 }; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     hImageViewSemafor = (ImageView)findViewById(R.id.idImageViewSemafor); 
     hButton = (Button) findViewById(R.id.idBtnChangeImage); 
     //Just set one Click listener for the image 
     hButton.setOnClickListener(aButtonChangeImageListener); 

    } 
    View.OnClickListener aButtonChangeImageListener = new OnClickListener() { 

     public void onClick(View v) { 
      //Increase Counter to move to next Image 
      currentImage++; 
      currentImage = currentImage % images.length; 

      hImageViewSemafor.setImageResource(images[currentImage]); 

     } 
    }; 
} 

UPDATE 2

的问题是在

currentImage--; 
currentImage = currentImage % images.length; 

如,从第一图像去先前图像时,currentImage变得小于0并且它是不可能的MOD( %)一个负数。这会导致你的错误。 所以通过改变它。

currentImage--; 
currentImage = (currentImage + images.length) % images.length; 

我们通过将图像总数添加到当前图像编号来解决了它变得小于0的问题。

下面的这段代码应该是固定的代码。

package com.galerionsekiz; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 


public class Main extends Activity { 

    private ImageView hImageViewPic; 
    private Button iButton, gButton; 

    private int currentImage = 0; 
    int[] images = { R.drawable.r1, R.drawable.r2, R.drawable.r3, R.drawable.r4, R.drawable.r5, R.drawable.r6, R.drawable.r7, R.drawable.r8, R.drawable.r9, R.drawable.r10 }; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     hImageViewPic = (ImageView)findViewById(R.id.idImageViewPic); 
     iButton = (Button) findViewById(R.id.bIleri); 
     gButton = (Button) findViewById(R.id.bGeri); 
     //Just set one Click listener for the image 

     iButton.setOnClickListener(iButtonChangeImageListener); 
     gButton.setOnClickListener(gButtonChangeImageListener); 
    } 
    View.OnClickListener iButtonChangeImageListener = new OnClickListener() { 

     public void onClick(View v) { 
      //Increase Counter to move to next Image 
      currentImage++; 
      currentImage = currentImage % images.length; 

      hImageViewPic.setImageResource(images[currentImage]); 

     } 
    }; 

    View.OnClickListener gButtonChangeImageListener = new OnClickListener() { 

     public void onClick(View v) { 
      //Increase Counter to move to next Image 
      currentImage--; 
      currentImage = (currentImage + images.length) % images.length; 

      hImageViewPic.setImageResource(images[currentImage]); 

     } 
    }; 
} 
+1

为什么不保持INT []的引用,并删除巨大的交换机块?在我看来,这会比10元件开关更清洁了很多... 'INT []图像= {R.drawable.r1,R.drawable。 R2,...}; imageview.setImageResource(图像[1]);' 希望它能帮助) –

+0

哇,它的工作:)很棒,非常感谢你! – eistanbullu

+0

@Pawel Cala我现在已经删除了大开关块并添加和更新。我只想这样做,以保持简单易懂。 – JamesG

-1

嘿朋友试试我的逻辑。它适用于任何数量的图像。 您的主要活动代码-

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.view.View; 

public class MainActivity extends Activity { 
ImageView imageView1; 
Button button1; 
int len=images.length-1; 
static int curr=0; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    imageView1=(ImageView)findViewById(R.id.imageView1); 
    button1=(Button)findViewById(R.id.button1); 
} 

private static final int[] images=new int[]  {R.drawable.i1,R.drawable.i2,R.drawable.i3,R.drawable.i4,R.drawable.i5,R.drawable.i6}; 
public void onClick(View view) 
{ 
    if(curr<6){ 
    imageView1.setImageResource(images[curr]); 
    }else 
    { 
     curr=-1; 
    } 
    curr++; 
    } 
} 
+0

请详细说明一下。为什么这是解决OP的问题?代码中的关键是什么? – TobiMcNamobi