Android 在ListView中将渐变效果添加到TextView会生成NPE
我已经尝试将渐变效果添加到Android 在ListView中将渐变效果添加到TextView会生成NPE,android,nullpointerexception,gradient,textview,Android,Nullpointerexception,Gradient,Textview,我已经尝试将渐变效果添加到TextView。但是它生成了一个NPE(我觉得idto是罪魁祸首,但事实并非如此) 我的活动: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); TextView textView = (Text
TextView
。但是它生成了一个NPE
(我觉得id
to是罪魁祸首,但事实并非如此)
我的活动
:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
TextView textView = (TextView)findViewById(R.id.label);
Shader textShader=new LinearGradient(0, 0, 0, 20,
new int[]{Color.GREEN,Color.BLUE},
new float[]{0, 1}, TileMode.CLAMP);
textView.getPaint().setShader(textShader);
// storing string resources into Array
String[] menulist = getResources().getStringArray(R.array.menulist);
// Binding resources Array to ListAdapter
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, menulist));
}
我觉得我错过了一些明显的东西
如果有任何其他方法可以获得具有渐变颜色效果的列表,请随时提出建议。尝试以下方法:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
final Shader shader = new LinearGradient(0, 0, 0, 20,
new int[]{Color.GREEN,Color.BLUE},
new float[]{0, 1}, Shader.TileMode.CLAMP
);
// storing string resources into Array
final String[] menulist = getResources().getStringArray(R.array.menulist);
// Binding resources Array to ListAdapter
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, menulist) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = super.getView(position, convertView, parent);
final TextView label = (TextView) view.findViewById(R.id.label);
label.getPaint().setShader(shader);
return view;
}
});
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
最终着色器=新的LinearGradient(0,0,0,20,
新int[]{Color.GREEN,Color.BLUE},
新浮点[]{0,1},Shader.TileMode.CLAMP
);
//将字符串资源存储到数组中
最后一个字符串[]menulist=getResources().getStringArray(R.array.menulist);
//将资源数组绑定到ListAdapter
this.setListAdapter(新的ArrayAdapter(this,R.layout.list_项,R.id.label,菜单列表){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终视图=super.getView(位置、转换视图、父视图);
最终TextView标签=(TextView)view.findViewById(R.id.label);
label.getPaint().setShader(着色器);
返回视图;
}
});
}
仍在第行获得一个NPE
:label.getPaint().setShader(着色器)非常有趣的是,我的版本在textView.getPaint().setShader(textShader)上给出了一个NPE
ooops,my bad=(应该是view.findViewById
而不是findViewById
。我已经更新了我的答案!我会投票,也许会接受。但有趣的是,它不符合我的目的。文本有渐变,我希望文本的背景有渐变。唉!
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
final Shader shader = new LinearGradient(0, 0, 0, 20,
new int[]{Color.GREEN,Color.BLUE},
new float[]{0, 1}, Shader.TileMode.CLAMP
);
// storing string resources into Array
final String[] menulist = getResources().getStringArray(R.array.menulist);
// Binding resources Array to ListAdapter
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, menulist) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = super.getView(position, convertView, parent);
final TextView label = (TextView) view.findViewById(R.id.label);
label.getPaint().setShader(shader);
return view;
}
});
}