我做了一个在布局上有动画效果的位图按钮,但它找不到布局的id,它显示它指示空点
下面是我的源码
public class BitmapButton extends Button{
public BitmapButton(Context context) {
super(context);
init();
}
public BitmapButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init(){
setBackgroundResource(R.drawable.background_selector);
setOnClickListener(new OnClickListener() {
boolean selected=true;
Animation anim;
LinearLayout layout_search = (LinearLayout)findViewById(R.id.layout_search);
@Override
public void onClick(View v) {
if(selected) {
setSelected(true);
anim = AnimationUtils.loadAnimation(getContext(), R.anim.translate_down);
***layout_search.startAnimation(anim);***
layout_search.setVisibility(View.VISIBLE);
selected =!selected;
}
else{
setSelected(false);
anim = AnimationUtils.loadAnimation(getContext(), R.anim.translate_up);
layout_search.startAnimation(anim);
layout_search.setVisibility(View.GONE);
selected =!selected;
}
}
});
}
}========================================================================= layout_search.startAnimation(anim);
从这里开始就会说错了
java.lang.NullPointerException:尝试对null对象引用调用虚拟方法void android.widget.LinearLayout.startAnimation(android.view.animation.Animation)
我知道Button类中的findViewById方法与MainActivity中的方法不同,但我不知道如何找到LinearLayout linear_search??有了这个问题,我可以在这个按钮上做动画效果。请让我知道。
发布于 2015-07-10 18:29:26
public class BitmapButton extends Button{
public BitmapButton(Context context) {
super(context);
init();
}
public BitmapButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init(){
setBackgroundResource(R.drawable.background_selector);
setOnClickListener(new OnClickListener() {
boolean selected=true;
Animation anim;
// _____________ just commented out this line ______________
// LinearLayout layout_search = (LinearLayout)v.findViewById(R.id.layout_search);
@Override
public void onClick(View v) {
// i simply add this line here and add view v before findViewById
LinearLayout layout_search = (LinearLayout)v.findViewById(R.id.layout_search);
if(selected) {
setSelected(true);
anim = AnimationUtils.loadAnimation(getContext(), R.anim.translate_down);
***layout_search.startAnimation(anim);***
layout_search.setVisibility(View.VISIBLE);
selected =!selected;
}
else{
setSelected(false);
anim = AnimationUtils.loadAnimation(getContext(), R.anim.translate_up);
layout_search.startAnimation(anim);
layout_search.setVisibility(View.GONE);
selected =!selected;
}
}
});
}
}发布于 2015-07-10 18:33:03
LinearLayout layout_search = (LinearLayout)findViewById(R.id.layout_search);来自文档:
查找具有给定id的子视图。如果此视图具有给定的id,则返回此视图。
您正在尝试搜索布局内部按钮。如果要在按钮的父对象上启动动画,请尝试使用getParent().findViewById。
https://stackoverflow.com/questions/31337263
复制相似问题