2013-01-04 43 views
0

你好,我正在製作一個拼圖遊戲應用程序,爲此我有16個使用height = width = 240的大比例位圖製作較小的位圖。現在我必須動態顯示這些位圖一次只能執行一項活動。我試過的代碼無法正常工作,因爲它在一行中顯示所有圖像,圖像尺寸太小。下面是代碼:如何在Android中動態創建大量的imageView

public void display() 
    { 
     float x =0; 
     float y = 0; 
     LinearLayout llMain = new LinearLayout(this); 
     for(int i=0;i<3;i++) 
     { 
      LinearLayout llRow = new LinearLayout(this); 
      for(int j=0;j<tiles.length/4;j++) 
      { 
       ImageView iv = new ImageView(this); 
       iv.setImageBitmap(tiles[j]);// get bitmap from image path 
       iv.setX(x); 
       iv.setY(y); 
       x = y = x + 60; 
       llRow.addView(iv); 
      } 
      llMain.addView(llRow); 
     } 
     setContentView(llMain); 
     } 
} 

這裏是logcat的:

01-05 00:32:35.820: D/dalvikvm(11346): GC_EXTERNAL_ALLOC freed 47K, 52% free 2599K/5379K, external 1990K/2108K, paused 135ms 
01-05 00:32:44.183: D/dalvikvm(11346): GC_EXTERNAL_ALLOC freed 43K, 50% free 2739K/5379K, external 2477K/2527K, paused 18ms 
01-05 00:32:45.156: I/dalvikvm(11346): Could not find method android.widget.ImageView.setX, referenced from method com.maju.jigsawpuzzle.PlayBoard.display 
01-05 00:32:45.156: W/dalvikvm(11346): VFY: unable to resolve virtual method 3236: Landroid/widget/ImageView;.setX (F)V 
01-05 00:32:45.156: D/dalvikvm(11346): VFY: replacing opcode 0x6e at 0x002e 
01-05 00:32:45.156: D/dalvikvm(11346): VFY: dead code 0x0031-003e in Lcom/maju/jigsawpuzzle/PlayBoard;.display()V 
01-05 00:32:45.179: D/AndroidRuntime(11346): Shutting down VM 
01-05 00:32:45.179: W/dalvikvm(11346): threadid=1: thread exiting with uncaught exception (group=0x40015578) 
01-05 00:32:45.187: E/AndroidRuntime(11346): FATAL EXCEPTION: main 
01-05 00:32:45.187: E/AndroidRuntime(11346): java.lang.NoSuchMethodError: android.widget.ImageView.setX 
01-05 00:32:45.187: E/AndroidRuntime(11346): at com.maju.jigsawpuzzle.PlayBoard.display(PlayBoard.java:164) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at com.maju.jigsawpuzzle.PlayBoard.shuffleArray(PlayBoard.java:143) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at com.maju.jigsawpuzzle.PlayBoard.breakImage(PlayBoard.java:123) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at com.maju.jigsawpuzzle.PlayBoard.onCreate(PlayBoard.java:40) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at android.os.Looper.loop(Looper.java:123) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at android.app.ActivityThread.main(ActivityThread.java:3687) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at java.lang.reflect.Method.invokeNative(Native Method) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at java.lang.reflect.Method.invoke(Method.java:507) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
01-05 00:32:45.187: E/AndroidRuntime(11346): at dalvik.system.NativeStart.main(Native Method) 

164行是行:

iv.setX(X);

有沒有人知道解決方案?而且我與他們註冊的onClick ......在advancce

+1

你在運行這個API級別是什麼?僅在API級別11中添加了setX()。 – CloudyMusic

+0

With 8但是當編譯器要求我這樣做時,我提到了@TargetApi(11) –

+0

僅僅因爲你瞄準的是更高的API並不意味着它可以運行在更低的設備。如果你在11以下的設備上運行這個,你會看到這個運行時錯誤。 – Falmarri

回答

0

由於按照documentation

的setX的方法是隻在API級別11

可這意味着如果您使用的是Android 2.x,則您的應用會崩潰。

我想你的代碼中有一些Lint警告,不是嗎?

我從來沒有使用過setX方法,也沒有辦法幫助,但我希望你能在蜂窩設備上找到一些選擇。

當你將發現,你可以使用

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){} 
相關問題