2017-05-04 5 views
0

J'ai besoin de définir dynamiquement un fond d'image d'un textview et le rendre semi-transparent, avec du texte avec une opacité complète.Comment rendre l'arrière-plan de l'image de textview semi transparent mais pas le texte?

Quelque chose comme ça, mais compatible avec < 21 API.

android:backgroundTint="#80FFFFFF" 
android:backgroundTintMode="src_over" 

Lorsque j'utilise

textView.setBackgroundResource(x.getPicture()); 
textview.getBackground().setAlpha(80); 

cela fonctionne, mais plus tard, quand j'utilise la même ressource à un imageview il reste transparent même si j'utilise

imageView.setImageAlpha(255); 

ou

imageView.setAlpha((float) 1.0); 

Et cela affecte tout te xtview y compris le texte lui-même.

textView.setAlpha((float) 0.5); 

J'ai essayé tout ce que j'ai pu trouver mais je n'ai pas trouvé de solution. Qu'est-ce que je fais mal?

mise en page entier xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
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:background="@drawable/bg1"> 

<include 
    android:id="@+id/top_toolbar_details" 
    layout="@layout/toolbar" 
    android:layout_width="0dp" 
    android:layout_height="68dp" 
    app:layout_constraintTop_toTopOf="parent" 
    tools:layout_editor_absoluteX="0dp" /> 

<LinearLayout 
    android:id="@+id/ll_graphics" 
    android:layout_width="0dp" 
    android:layout_height="0dp" 
    android:layout_marginBottom="8dp" 
    android:orientation="vertical" 
    app:layout_constraintBottom_toTopOf="@+id/linearLayout" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/top_toolbar_details"> 

    <!--This is the imageview--> 
    <ImageView 
     android:id="@+id/iv_image" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clickable="true" 
     android:keepScreenOn="true" 
     android:longClickable="true" 
     android:scaleType="centerInside" 
     app:layout_constraintBottom_toTopOf="@+id/linearLayout" 
     app:layout_constraintHorizontal_bias="0.0" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/top_toolbar_details" /> 

    <VideoView 
     android:id="@+id/vv_video" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="gone" 
     app:layout_constraintBottom_toBottomOf="@+id/iv_image" 
     app:layout_constraintBottom_toTopOf="@+id/linearLayout" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/top_toolbar_details" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintVertical_bias="1.0" /> 

    <ScrollView 
     android:id="@+id/sv_scroller" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true" 
     android:scrollbars="vertical"> 

     <!--This is the textview--> 
     <TextView 
      android:id="@+id/tv_description" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:maxLines="20" 
      android:paddingBottom="20dp" 
      android:paddingEnd="20dp" 
      android:paddingStart="20dp" 
      android:paddingTop="10dp" 
      android:scrollbars="vertical" 
      android:textColor="@color/black" 
      android:visibility="gone" 
      app:layout_constraintBottom_toBottomOf="@+id/iv_image" 
      app:layout_constraintBottom_toTopOf="@+id/linearLayout" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/top_toolbar_details" /> 
    </ScrollView> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/linearLayout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="5dp" 
    android:layout_marginEnd="8dp" 
    android:layout_marginStart="8dp" 
    android:layout_marginTop="5dp" 
    android:orientation="horizontal" 
    android:weightSum="1" 
    app:layout_constraintBottom_toTopOf="@+id/llImg" 
    app:layout_constraintHorizontal_bias="0.505" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent"> 

    <ImageButton 
     android:id="@+id/b_last_viewed" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:background="@drawable/circle_shape_drawable" 
     android:scaleType="fitCenter" 
     android:src="@drawable/ic_previous" 
     app:layout_constraintBottom_toTopOf="@+id/llImg" 
     app:layout_constraintHorizontal_bias="0.773" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toLeftOf="@+id/b_to_all" 
     app:layout_constraintTop_toBottomOf="@+id/vv_video" 
     app:layout_constraintVertical_bias="0.97" /> 

    <ImageButton 
     android:id="@+id/b_to_all" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="20dp" 
     android:layout_marginStart="20dp" 
     android:adjustViewBounds="true" 
     android:background="@drawable/circle_shape_drawable" 
     android:scaleType="fitCenter" 
     android:src="@drawable/ic_grid" 
     app:layout_constraintBottom_toTopOf="@+id/llImg" 
     app:layout_constraintTop_toBottomOf="@+id/vv_video" 
     app:layout_constraintVertical_bias="0.95" 
     tools:layout_editor_absoluteX="176dp" /> 

    <ImageButton 
     android:id="@+id/b_to_favourites" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:adjustViewBounds="true" 
     android:background="@drawable/circle_shape_drawable" 
     android:scaleType="fitCenter" 
     android:src="@drawable/ic_favourite" 
     app:layout_constraintBottom_toTopOf="@+id/llImg" 
     app:layout_constraintHorizontal_bias="0.164" 
     app:layout_constraintLeft_toRightOf="@+id/b_to_all" 
     app:layout_constraintRight_toRightOf="parent" /> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/llImg" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:layout_constraintBottom_toBottomOf="parent" 
    tools:layout_editor_absoluteX="0dp"> 

    <android.support.v17.leanback.widget.HorizontalGridView 
     android:id="@+id/gv_small_preview" 
     android:layout_width="wrap_content" 
     android:layout_height="80dp" 
     android:layout_marginBottom="0dp" 
     android:layout_marginTop="0dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/b_last_viewed" 
     app:layout_constraintVertical_bias="0.0" 
     tools:layout_editor_absoluteX="0dp" /> 

</LinearLayout> 
</android.support.constraint.ConstraintLayout> 
+0

Essayez d'abord setAlpha sur l'image, puis réglez-le sur fond –

Répondre

0

réaligner simplement votre mise en page

//this is your root 
<RelativeLayout> 
    //this is your background 
    //add your semi transparent for below imageView 
    <ImageView android:height="match_parent" android:witdh="match_parent"/> 

    //this is your text 
    <TextView/ > 

</RelativeLayout> 

puis programme

imageView.setImageAlpha(255); //it will not affect the textview 

ou tout simplement ajouter android:alpha en XML à imageView

+0

c'est une bonne idée, j'ai réellement l'imageview sous le textview, mais je change leur visibilité en les commutant, parce que ma disposition est assez complexe et je ne peux pas le faire pour ne pas gâcher la disposition entière en essayant d'afficher à la fois l'imageview et le textview en même temps. Pensez-vous que vous pouvez jeter un oeil à mon code et essayer de me dire comment le faire dans mon cas? Je vais coller le code dans mon post original. – chaturanga

+0

J'ai essayé d'imbriquer la mise en page relative comme vous l'avez suggéré mais cela fait que la vue du texte et la hauteur de la vue vidéo sont 0dp bien que tout soit défini sur match_parent. La taille de la première mise en page linéaire est calculée dynamiquement en fonction de la taille de l'écran, c'est pourquoi elle est définie sur 0x0dp. Cela fonctionne, mais lorsque la disposition relative est ajoutée, cela ne fonctionne plus. – chaturanga

+0

ok que 0dp hauteur est apparemment causée par la visibilité mis à disparu, il semble ok dans blueprint lorsqu'il est défini sur in/visible, mais il n'apparaît toujours pas dans l'application lorsque certaines actions effectuées pour changer la visibilité (cliquez ou balayez). J'ai manqué d'idées pour y remédier. – chaturanga

0

Essayez ceci:

int myColor = Color.parseColor("#80FFFFFF"); 
Drawable backgroundColor = new ColorDrawable(myColor); 
backgroundColor.setAlpha(yourAlpha); 

textView.setBackground(backgroundColor); 
+0

merci, mais j'ai besoin d'une image en arrière-plan et le mettre à semi-transparent ou superposition avec semi-transparente la couleur, cela ne fait qu'une couleur transparente. – chaturanga