我在我的Android应用程序中有一个ImageView
,我想制作一个动画,我点击它。
这是我的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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/card_image_view"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_toRightOf="@+id/textView1"
android:clickable="true"
android:onClick="onCardClicked"
android:src="@drawable/card" />
这是我的java代码:
package com.example.androidpart;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v("hello", "Hello coucou!");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
void onCardClicked(View view) {
Log.v("oh!", "I clicked!");
view = (ImageView) findViewById(R.id.card_image_view);
// Using hardware layer
view.animate().translationX(400);
}
}
问题是当我运行它时应用程序停止了,而在logcat中它表示在MainActivity.java
中找不到onCardClicked方法,而它就在这里......
有人可以解释问题出在哪里吗?
答案 0 :(得分:3)
将onCardClicked更改为公开
public void onCardClicked(View view) {
Log.v("oh!", "I clicked!");
view = (ImageView) findViewById(R.id.card_image_view);
// Using hardware layer
view.animate().translationX(400);
}
答案 1 :(得分:2)
方法必须是公开的
public void onCardClicked(View view) {
Log.v("oh!", "I clicked!");
view = (ImageView) findViewById(R.id.card_image_view);
// Using hardware layer
view.animate().translationX(400);
}
中的文档
为了使[点击事件]有效,该方法必须为
public
并接受View
作为其唯一参数
答案 2 :(得分:1)
View.onClick的正确签名是
public void onClick(View view)
所以你方法的签名必须是
public void onCardClicked(View view)
答案 3 :(得分:0)
您可以考虑使用以下代码手动执行侦听器:
ImageView img = (Button) findViewById(R.id.card_image_view);
img.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.v("oh!", "I clicked!");
}
});
这种方式可能会在将来阻止运行时出现更多问题