Как переключать изображения между изображениями в Android?

1

Я новичок в 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;
    }
}
Теги:
imageview

2 ответа

1

в методах щелчка вы вызываете imgView.getBackground и устанавливаете фон как источник для других изображений, это то, что вы намеревались? Разве вы не должны звонить getDrawable?

Я предлагаю вам использовать ViewPager для выполнения этой функции, а не для использования всего фиксированного кода. Также вы должны прокомментировать код в onClick.

Обновление. Попробуйте этот файл макета. Я просто обернул ваш в HorizontalScrollView и изменил ширину 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>
  • 1
    Может быть, ViewFlipper? Не могу увидеть, как ViewPager поместился бы здесь.
  • 0
    getDrawable .. Я буду смотреть на это. Я не знаю много Android, поэтому я пытаюсь заставить его работать с вещами, которые я знаю, спасибо за помощь
Показать ещё 2 комментария
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 (и строки и т.д.), Используйте метод equals() из класса Object

if (image2.getDrawable().equals(leeg)) {
  • 0
    большое спасибо! Я внес изменения, но изображения не меняются, когда я нажимаю на них. ты знаешь, что это может быть? заранее спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню