0

我的应用程序对此有很多错误,我是编码新手,所以我很感激一些帮助。

我有一个应用程序,其中包含一些用户可以设置为壁纸的图像,这些图像是可绘制的,我将它们放在 Horizo​​ntalScrollView 中,我还有一个显示所选图像的 ImageView。

这就是我的 Main.java 的样子:

public class Main extends Activity implements OnClickListener {

ImageView display;
int wallPaper;
private AdView adView;
Bitmap setWall2;
Bitmap setWall3;

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


    /* START OF AdMob */

    // Create the adView
    adView = new AdView(this, AdSize.BANNER, "***************");

    // Lookup your LinearLayout assuming it’s been given
    // the attribute android:id="@+id/mainLayout"
    TableRow layout = (TableRow)findViewById(R.id.adView);

    // Add the adView to it
    layout.addView(adView);

    // Initiate a generic request to load it with an ad
    adView.loadAd(new AdRequest());

    /* END OF AdMob */


    wallPaper = R.drawable.image1;

    display = (ImageView) findViewById(R.id.iViewMain);
    ImageView image1 = (ImageView) findViewById(R.id.image1);
    ImageView image2 = (ImageView) findViewById(R.id.image2);
    ImageView image3 = (ImageView) findViewById(R.id.image3);
    ImageView image4 = (ImageView) findViewById(R.id.image4);
    ImageView image5 = (ImageView) findViewById(R.id.image5);
    ImageView image6 = (ImageView) findViewById(R.id.image6);
    ImageView image7 = (ImageView) findViewById(R.id.image7);
    ImageView image8 = (ImageView) findViewById(R.id.image8);
    ImageView image9 = (ImageView) findViewById(R.id.image9);
    ImageView image10 = (ImageView) findViewById(R.id.image10);
    ImageView image11 = (ImageView) findViewById(R.id.image11);
    ImageView image12 = (ImageView) findViewById(R.id.image12);
    ImageView image13 = (ImageView) findViewById(R.id.image13);

    Button setWall = (Button) findViewById(R.id.setWall);

    image1.setOnClickListener(this);
    image2.setOnClickListener(this);
    image3.setOnClickListener(this);
    image4.setOnClickListener(this);
    image5.setOnClickListener(this);
    image6.setOnClickListener(this);
    image7.setOnClickListener(this);
    image8.setOnClickListener(this);
    image9.setOnClickListener(this);
    image10.setOnClickListener(this);
    image11.setOnClickListener(this);
    image12.setOnClickListener(this);
    image13.setOnClickListener(this);

    setWall.setOnClickListener(this);

}

@SuppressWarnings("deprecation")
public void onClick(View v) {
    // TODO Auto-generated method stub

    switch (v.getId()) {
    case R.id.image1:
        display.setImageResource(R.drawable.image1);
        wallPaper = R.drawable.image1;
        break;
    case R.id.image2:
        display.setImageResource(R.drawable.image2);
        wallPaper = R.drawable.image2;
        break;
    case R.id.image3:
        display.setImageResource(R.drawable.image3);
        wallPaper = R.drawable.image3;
        break;
    case R.id.image4:
        display.setImageResource(R.drawable.image4);
        wallPaper = R.drawable.image4;
        break;
    case R.id.image5:
        display.setImageResource(R.drawable.image5);
        wallPaper = R.drawable.image5;
        break;
    case R.id.image6:
        display.setImageResource(R.drawable.image6);
        wallPaper = R.drawable.image6;
        break;
    case R.id.image7:
        display.setImageResource(R.drawable.image7);
        wallPaper = R.drawable.image7;
        break;
    case R.id.image8:
        display.setImageResource(R.drawable.image8);
        wallPaper = R.drawable.image8;
        break;
    case R.id.image9:
        display.setImageResource(R.drawable.image9);
        wallPaper = R.drawable.image9;
        break;
    case R.id.image10:
        display.setImageResource(R.drawable.image10);
        wallPaper = R.drawable.image10;
        break;
    case R.id.image11:
        display.setImageResource(R.drawable.image11);
        wallPaper = R.drawable.image11;
        break;
    case R.id.image12:
        display.setImageResource(R.drawable.image12);
        wallPaper = R.drawable.image12;
        break;
    case R.id.image13:
        display.setImageResource(R.drawable.image13);
        wallPaper = R.drawable.image13;
        break;
    case R.id.setWall:

        InputStream setWall3 = getResources().openRawResource(wallPaper);
        Bitmap setWall2 = BitmapFactory.decodeStream(setWall3);
        try {
            getApplicationContext().setWallpaper(setWall2);
            Context context = getApplicationContext();
            CharSequence text = "Wallpaper set!";
            int duration = Toast.LENGTH_SHORT;

            Toast toast = Toast.makeText(context, text, duration);
            toast.setGravity(Gravity.TOP|Gravity.RIGHT, 0, 0);
            toast.show();
        } catch(IOException e) {
            e.printStackTrace();
        }

        break;

    }
    System.gc();
}


@Override
protected void onResume() {
    // TODO Auto-generated method stub
    System.gc();
    super.onResume();

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    display = null;
    setWall2 = null;
    setWall3 = null;
    System.gc();
    super.onPause();
}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub

    ImageView image1 = (ImageView) findViewById(R.id.image1);
    image1.setImageDrawable(null);
    ImageView image2 = (ImageView) findViewById(R.id.image2);
    image2.setImageDrawable(null);
    ImageView image3 = (ImageView) findViewById(R.id.image3);
    image3.setImageDrawable(null);
    ImageView image4 = (ImageView) findViewById(R.id.image4);
    image4.setImageDrawable(null);
    ImageView image5 = (ImageView) findViewById(R.id.image5);
    image5.setImageDrawable(null);
    ImageView image6 = (ImageView) findViewById(R.id.image6);
    image6.setImageDrawable(null);
    ImageView image7 = (ImageView) findViewById(R.id.image7);
    image7.setImageDrawable(null);
    ImageView image8 = (ImageView) findViewById(R.id.image8);
    image8.setImageDrawable(null);
    ImageView image9 = (ImageView) findViewById(R.id.image9);
    image9.setImageDrawable(null);
    ImageView image10 = (ImageView) findViewById(R.id.image10);
    image10.setImageDrawable(null);
    ImageView image11 = (ImageView) findViewById(R.id.image11);
    image11.setImageDrawable(null);
    ImageView image12 = (ImageView) findViewById(R.id.image12);
    image12.setImageDrawable(null);
    ImageView image13 = (ImageView) findViewById(R.id.image13);
    image13.setImageDrawable(null);

    display = null;
    setWall2 = null;
    setWall3 = null;
    System.gc();
    super.onDestroy();
}

}

谢谢!

4

1 回答 1

1

你在关注 Youtube 上的教程吗?我也从其中一些开始,但学习了一些关于复合视图/视图组的非常低效的编码实践。首先,您真的不应该静态地创建这么多 imageView 对象并为每个对象设置单独的侦听器。这真的是非常糟糕的做法。所以完全避免这种方法。我的意思是,从现在开始习惯以正确的方式做事,这样你就不必像我一样回来改变/重新学习/把头撞到墙上太多:)!

您需要使用专门为此目的构建的 GridView、ListView、ViewFlipper、Gallery 或其他类型的容器。在使用当前方法时,您将不断遇到位图和 OOM 错误

网格视图教程

画廊教程

于 2012-12-09T19:42:34.313 回答