2015-12-24 4 views
1

Я создаю файл ресурсов макета с именем btn.xml, он содержит ImageView. в основной деятельности i раздувают btn.xml в content_main.xml, и я пытаюсь установить фон с раздутым представлением. но он показывает мне: Drawable.setColorFilter (интермедиат, android.graphics.PorterDuff $ Mode)»на нулевой ссылки на объектsetColorFilter показывает нулевую ссылку на объект

код Java в mainActivity:

View v; 
RelativeLayout rlt; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    LayoutInflater myInflater = (LayoutInflater) getApplicationContext().getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE); 
    v = myInflater.inflate(R.layout.btn,null,false); 
    // Here is the probelm : 
    v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN); 
    rlt = (RelativeLayout) findViewById(R.id.rlt); 
    rlt.addView(v); 
} 

content_main.xml Планировка:

<?xml version="1.0" encoding="utf-8"?> 
 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
 
    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" 
 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
 
    tools:context="com.example.othma.tjkljklj.MainActivity" 
 
    tools:showIn="@layout/activity_main" 
 
    android:id="@+id/rlt"> 
 

 
    <TextView 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:text="Hello World!" 
 
     android:id="@+id/textView" /> 
 

 
</RelativeLayout>

файл btn.xml расположение ресурсов

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:orientation="vertical" android:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    android:weightSum="1"> 
 

 
    <ImageView 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:id="@+id/imgv1" 
 
     android:src="@drawable/continu" /> 
 
</LinearLayout>

+0

пост макет – Blackbelt

+0

я редактировал пост –

+0

btn.xml не имеет фона. Почему вы ожидаете, что getBackground вернет что-то не null? – Blackbelt

ответ

1

в вашем btn.xml файла, как вы видите, вы не устанавливали рисуете на ваш взгляд (LinearLayout), так что вы получили эталонную ошибки в нулевого объекта.

setColorFilter() метод указать цвет и режим Портер-Duff быть цветной фильтр для растяжимой.

Например, если вы хотите изменить цвет изображения, пригодный для рисования (или любого вида), вы должны использовать метод setColorFilter().

imageview.getDrawable().setColorFilter(color, mode); 

, если вы хотите изменить цвет фона вашего зрения, то вы должны использовать setBackgroundColor() метод.

view.setBackgroundColor(getResources().getColor(R.color.anycolor)); 
+0

спасибо, он работает, но это не тот результат, который я искал. Я хочу оказать какое-то влияние на VIEW, который будет отображаться в нажатом режиме, например, когда я нажимаю на изображение, становится темнее, чтобы пользователь увидел, что он действительно нажат .... с setColorFilter (int , android.graphics.PorterDuff $ Mode) на ImageView делает хорошую работу –

0

Ваш LinearLayout не имеет никакого фона.

Вы Propably должны использовать setBackgroundColor (INT) кубовых остатков так:

v.setBackgroundColor(Color.parseColor("#00ff00")); 

Примечание: Это намного безопаснее явного приведения ваш надутый вид. Вот полный код:

LinearLayout v; 
RelativeLayout rlt; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    LayoutInflater myInflater = (LayoutInflater) getApplicationContext().getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE); 

    // Explicit Cast to LinearLayout 
    v = (LinearLayout) myInflater.inflate(R.layout.btn,null,false); 
    // setting background: 
    v.setBackgroundColor(Color.parseColor("#00ff00")); 

    rlt = (RelativeLayout) findViewById(R.id.rlt); 
    rlt.addView(v); 
} 
+0

Ресурсы $ NotFoundException: Идентификатор ресурса # 0xff00ff00 –

+0

@ Otmàane Fikri Я обновил свой ответ. –

+0

'setBackgroundResource' принимает идентификатор как параметр, а не произвольный цвет – pskink

Смежные вопросы