Я новичок в 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;
}
}
в методах щелчка вы вызываете 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) Не используйте 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)) {