2013-04-23 77 views
2

我真的不知道为什么这不起作用,我一直试图通宵。ImageView应该减去分数,当我点击它。我也尝试过记录它,但没有成功..可能是因为我的动画干扰了某种方式?为什么我的OnClick for 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和当前代码更新了代码。

+0

您在清单中定位了哪个API版本? – Grambot 2013-04-23 21:44:05

+0

您的代码是否正在执行PeanutClick?如果你在第一行放置一个断点(score = -100),它会被击中吗? – RvdK 2013-04-23 21:50:44

+0

gameviewLayout.xml是什么样的布局?这是偶然的框架布局吗?有一些布局的情况下,你的对象将被遮盖,而不是其领域的最前面的东西。有些人通过将布局中的对象(在这种情况下为您的ImageVew)进一步向下移动来解决问题,因此它会高于其他冲突项目。 – HalR 2013-04-24 00:39:25

回答

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"

+0

'layout_height'呢?这是否也必须改变? – 2014-03-17 18:13:54

+0

如果您更改layout_height以填充父项,则整个屏幕水平和垂直均可点击。 – 2014-03-19 09:42:14

+0

不适合我 – delive 2015-10-23 08:20:07

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(); 
    } 
} 
+0

嗨cskoala。在实现这些功能之后,它仍然不会注册任何onclick事件...这是我的完整代码; http://paste2.org/mHBUg71v – 2013-04-24 09:25:05

+0

aaaaaaaaaargh它驱使我坚果 – 2013-04-24 11:17:16

+0

你得到它的工作已经是正确的? =] – 2013-04-24 20:58:34

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

公共方法应该在视图参数。

+0

谢谢,这使它的工作,但只在图像的原始位置。但至少onclick正在工作,谢谢! – 2013-04-24 12:09:45

相关问题