2

これが機能しない理由がまったくわかりません。一晩中試してみImageViewました。クリックするとスコアが差し引かれます。私もそれをログに記録しようとしましたが、成功しませんでした..私のアニメーションが何らかの形で干渉しているためでしょうか?

これは私のXML全体です

<TextView
    android:id="@+id/timer1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Test" />
<TextView
    android:id="@+id/score1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Score:" />

<ImageView
    android:id="@+id/imgview1"
    android:layout_width="83dp"
    android:layout_height="131dp"
    android:clickable="true"  
    android:onClick="PeanutClick" 
    android:src="@drawable/lil_peanut"/>

これは私のソースコードです

public class GameView extends Activity implements OnClickListener {
MediaPlayer backgroundMusic;
TextView mTextField;
TextView mScoreField;
Point size = new Point();
Display display;
ImageView image;
int score = 0;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gameviewlayout);
    int l;
    mTextField = (TextView) findViewById(R.id.timer1);
    mScoreField = (TextView) findViewById(R.id.score1);
    image = (ImageView) findViewById(R.id.imgview1);
    image.setOnClickListener(this);
    TranslateAnimation moveLefttoRight = new TranslateAnimation(0, 200, 0,
            0);
    moveLefttoRight.setDuration(5000);
    moveLefttoRight.setFillAfter(true);
    moveLefttoRight.setRepeatCount(-1);
    moveLefttoRight.setRepeatMode(Animation.REVERSE);
    image.startAnimation(moveLefttoRight);
    new CountDownTimer(45000, 1000) {

        public void onTick(long millisUntilFinished) {
            mTextField.setText("Seconds Remaining: " + millisUntilFinished
                    / 1000);
        }

        public void onFinish() {
            mTextField.setText("done!");
        }
    }.start();
    display = getWindowManager().getDefaultDisplay();
    display.getSize(size);
    int width = size.x;
    int height = size.y;
    backgroundMusic = MediaPlayer
            .create(GameView.this, R.raw.gallery_music);
    backgroundMusic.start();

}

public void onClick(View v) {
    if (v.getId() == R.id.imgview1)
        Log.i("MB2", "Touchy touchy!");
    PeanutClick();
}

public void PeanutClick() {
    score = score - 100;
    mScoreField.setText("Score: " + score);
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    backgroundMusic.release();

}

編集; 投稿されたソリューションは機能しません。XML 全体と現在のコードでコードを更新しました。

4

3 に答える 3

1
public void PeanutClick(View ビュー) {
    スコア = スコア - 100;
    mScoreField.setText("スコア: " + スコア);
}

public メソッドは、View パラメーターを受け取る必要があります。

于 2013-04-24T11:41:21.320 に答える
0

クリック プロパティが XML でどのように機能するかは完全にはわかりません。しかし、次の行に沿ってJavaファイルでそれを行うことができます...

public class GameView extends Activity implements OnClickListener{
   ImageView iv;
   // whatever else

   public void onCreate(...)
   {
       // ...
       iv = (ImageView) findViewById(R.id.imageView1);
       iv.setOnClickListener(this);
   }

   public void onClick(View v)
   {
       if (v.getId() == R.id.imageView1)
          PeanutClick();
   }
}
于 2013-04-23T21:37:57.053 に答える
0

皆様のお陰で解決できました。はonClickずっと機能していましたが、画像の元の位置でのみ機能していました。

<ImageView
android:id="@+id/imgview1"
android:layout_width="83dp"
android:layout_height="131dp"
android:clickable="true"  
android:onClick="PeanutClick" 
android:src="@drawable/lil_peanut"/>

この XML では、左上隅のみがクリック可能です。android:layout_width="83dp"に変更して 修正しまし たandroid:layout_width="fill_parent"

于 2013-04-24T12:16:20.040 に答える