我是初学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;
}
}
答案 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中注释代码。
<强>更新强> 试试这个布局文件。我只是将你的包裹在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>