如何在android中的imageviews之间切换图像?

时间:2013-02-12 17:49:22

标签: android xml imageview

我是初学Android并制作幻灯片拼图。我想通过在图像视图之间交换图像而不是滑动图像来保持简单。 我的代码doenst给出任何错误,但也没有做任何事情。 你能帮我么。

这是我的xml代码:

<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" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="44dp"
        android:src="@drawable/ic_launcher"
        android:tag="1" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_marginLeft="3dp"
        android:layout_toRightOf="@+id/imageView1"
        android:src="@drawable/ic_launcher" 
        android:tag="2" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView2"
        android:layout_marginLeft="3dp"
        android:layout_toRightOf="@+id/imageView2"
        android:src="@drawable/ic_launcher"
        android:tag="3"  />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageView1"
        android:layout_below="@+id/imageView1"
        android:layout_marginTop="3dp"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView4"
        android:layout_alignLeft="@+id/imageView2"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView5"
        android:layout_alignLeft="@+id/imageView3"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageView4"
        android:layout_below="@+id/imageView4"
        android:layout_marginTop="3dp"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView7"
        android:layout_alignLeft="@+id/imageView5"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView8"
        android:layout_alignRight="@+id/imageView6"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

这是我的MainActivity代码:

package com.example.puzzelencauseican;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView image1=(ImageView) findViewById(R.id.imageView1);
    Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.img1);
    int width=(int)(bmp.getWidth() /2);
    int height=(int)(bmp.getHeight() /2);
    Bitmap resizedbitmap=Bitmap.createScaledBitmap(bmp,width, height,true);
    image1.setImageBitmap(resizedbitmap);
    image1.setOnClickListener(this);

    ImageView image2=(ImageView) findViewById(R.id.imageView2);
    Bitmap bmp2=BitmapFactory.decodeResource(getResources(), R.drawable.img2);
    int width2=(int)(bmp2.getWidth() /2);
    int height2=(int)(bmp2.getHeight() /2);
    Bitmap resizedbitmap2=Bitmap.createScaledBitmap(bmp2, width2, height2,true);
    image2.setImageBitmap(resizedbitmap2);
    image2.setOnClickListener(this);

    ImageView image3=(ImageView) findViewById(R.id.imageView3);
    Bitmap bmp3=BitmapFactory.decodeResource(getResources(), R.drawable.img3);
    int width3=(int)(bmp3.getWidth() /2);
    int height3=(int)(bmp3.getHeight() /2);
    Bitmap resizedbitmap3=Bitmap.createScaledBitmap(bmp3, width3, height3,true);
    image3.setImageBitmap(resizedbitmap3);
    image3.setOnClickListener(this);

    ImageView image4=(ImageView) findViewById(R.id.imageView4);
    Bitmap bmp4=BitmapFactory.decodeResource(getResources(), R.drawable.img4);
    int width4=(int)(bmp4.getWidth() /2);
    int height4=(int)(bmp4.getHeight() /2);
    Bitmap resizedbitmap4=Bitmap.createScaledBitmap(bmp4, width4, height4,true);
    image4.setImageBitmap(resizedbitmap4);
    image4.setOnClickListener(this);

    ImageView image5=(ImageView) findViewById(R.id.imageView5);
    Bitmap bmp5=BitmapFactory.decodeResource(getResources(), R.drawable.img5);
    int width5=(int)(bmp5.getWidth() /2);
    int height5=(int)(bmp5.getHeight() /2);
    Bitmap resizedbitmap5=Bitmap.createScaledBitmap(bmp5,width5, height5,true);
    image5.setImageBitmap(resizedbitmap5);
    image5.setOnClickListener(this);

    ImageView image6=(ImageView) findViewById(R.id.imageView6);
    Bitmap bmp6=BitmapFactory.decodeResource(getResources(), R.drawable.img6);
    int width6=(int)(bmp6.getWidth() /2);
    int height6=(int)(bmp6.getHeight() /2);
    Bitmap resizedbitmap6=Bitmap.createScaledBitmap(bmp6,width6, height6,true);
    image6.setImageBitmap(resizedbitmap6);
    image6.setOnClickListener(this);

    ImageView image7=(ImageView) findViewById(R.id.imageView7);
    Bitmap bmp7=BitmapFactory.decodeResource(getResources(), R.drawable.img7);
    int width7=(int)(bmp7.getWidth() /2);
    int height7=(int)(bmp7.getHeight() /2);
    Bitmap resizedbitmap7=Bitmap.createScaledBitmap(bmp7,width7, height7,true);
    image7.setImageBitmap(resizedbitmap7);
    image7.setOnClickListener(this);

    ImageView image8=(ImageView) findViewById(R.id.imageView8);
    Bitmap bmp8=BitmapFactory.decodeResource(getResources(), R.drawable.img8);
    int width8=(int)(bmp8.getWidth() /2);
    int height8=(int)(bmp8.getHeight() /2);
    Bitmap resizedbitmap8=Bitmap.createScaledBitmap(bmp8,width8, height8,true);
    image8.setImageBitmap(resizedbitmap8);
    image8.setOnClickListener(this);

    ImageView image9=(ImageView) findViewById(R.id.imageView9);
    Bitmap bmp9=BitmapFactory.decodeResource(getResources(), R.drawable.leeg);
    int width9=(int)(bmp8.getWidth() /2);
    int height9=(int)(bmp8.getHeight() /2);
    Bitmap resizedbitmap9=Bitmap.createScaledBitmap(bmp9,width9, height9,true);
    image9.setImageBitmap(resizedbitmap9);
    image9.setOnClickListener(this);

}

private void imageView1Click() {
    ImageView image1=(ImageView) findViewById(R.id.imageView1);
    ImageView image2 = (ImageView) findViewById(R.id.imageView2);
    ImageView image4 = (ImageView) findViewById(R.id.imageView4);
    Context mContext = null;
    Drawable leeg;

    leeg = mContext.getResources().getDrawable(R.drawable.leeg);

    if( image4.getDrawable() == leeg ){
        Drawable verander1 = image1.getBackground();
        Drawable verander2 = image4.getBackground();
        image4.setBackground(verander1);
        image1.setBackground(verander2);
    }

    if (image2.getDrawable() == leeg){
        Drawable verander1 = image1.getBackground();
        Drawable verander2 = image2.getBackground();
        image2.setBackground(verander1);
        image1.setBackground(verander2);
    }
}



private void imageView8Click() {
    ImageView image5=(ImageView) findViewById(R.id.imageView5);
    ImageView image7 = (ImageView) findViewById(R.id.imageView7);
    ImageView image8=(ImageView) findViewById(R.id.imageView8);
    ImageView image9 = (ImageView) findViewById(R.id.imageView9);
    Drawable leeg;

    leeg = getResources().getDrawable(R.drawable.leeg);

    if( image5.getDrawable() == leeg ){
        Drawable verander1 = image8.getBackground();
        Drawable verander2 = image5.getBackground();
        image5.setImageDrawable(verander1);
        image8.setImageDrawable(verander2);
    }

    if( image7.getDrawable() == leeg ){
        Drawable verander1 = image8.getBackground();
        Drawable verander2 = image7.getBackground();
        image7.setImageDrawable(verander1);
        image8.setImageDrawable(verander2);
    }

    if( image9.getDrawable() == leeg ){
        Drawable verander1 = image8.getBackground();
        Drawable verander2 = image9.getBackground();
        image9.setImageDrawable(verander1);
        image8.setImageDrawable(verander2);
    }

}

public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.imageView1:
        imageView1Click();
        break;
    case R.id.imageView8:
        imageView8Click();
        break;
    }
}

2 个答案:

答案 0 :(得分:1)

1)不要经常使用findViewById。使用一次并保留链接。这对于性能操作来说相当复杂。

2)不要两次加载位图。您可以使用以下方法通过一次操作创建两倍缩放位图。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);

3)

image4.getDrawable() == leeg

这里总是会返回false,因为leeg是新创建的对象

不要比较像==这样的对象内容。此运算符适用于比较基元类型。 ==运算符将链接与对象进行比较,而不是对象的内容。您只能使用(object1 == object2)来检查它是否指向同一个对象实例,而不是具有相同数据的对象。要比较两个Drawables(和Strings等),请使用Object类

中的equals()方法
if (image2.getDrawable().equals(leeg)) {

答案 1 :(得分:1)

在你调用imgView.getBackground的click方法中,并将背景设置为其他imageVIews的源,这是你的意图吗?你不应该打电话给getDrawable吗?

我建议您使用ViewPager来执行此功能,而不是使用所有固定代码。您还应该在onClick中注释代码。

<强>更新 试试这个布局文件。我只是将你的包裹在Horizo​​ntalScrollView中,并修改了RelativeLayout的宽度。

<HorizontalScrollView 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" >
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="44dp"
        android:layout_marginTop="44dp"
        android:src="@drawable/ic_launcher"
        android:tag="1" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_marginLeft="3dp"
        android:layout_toRightOf="@+id/imageView1"
        android:src="@drawable/ic_launcher" 
        android:tag="2" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView2"
        android:layout_marginLeft="3dp"
        android:layout_toRightOf="@+id/imageView2"
        android:src="@drawable/ic_launcher"
        android:tag="3"  />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageView1"
        android:layout_below="@+id/imageView1"
        android:layout_marginTop="3dp"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView4"
        android:layout_alignLeft="@+id/imageView2"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView5"
        android:layout_alignLeft="@+id/imageView3"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageView4"
        android:layout_below="@+id/imageView4"
        android:layout_marginTop="3dp"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView7"
        android:layout_alignLeft="@+id/imageView5"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView8"
        android:layout_alignRight="@+id/imageView6"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

</HorizontalScrollView>