Android e definindo alfa para visualização de (imagem) alfa

Respostas:

195

Não, não há, veja como a seção "Atributos XML relacionados" está ausente na documentação ImageView.setAlpha (int) . A alternativa é usar o View.setAlpha (float) cuja contraparte XML é android:alpha. É preciso um intervalo de 0,0 a 1,0 em vez de 0 a 255. Use-o, por exemplo, como

<ImageView android:alpha="0.4">

No entanto, este último está disponível apenas desde o nível 11 da API.

sschuberth
fonte
7
Mesmo que eu esteja apenas me repetindo aqui: ImageView.setAlpha(int)está demorando um intpouco para android:alphatomar uma flutuação, então, estritamente falando, o último não é o equivalente XML exato do primeiro, mas é o equivalente View.setAlpha(float). E como já foi mencionado várias vezes aqui, android:alpha/ View.setAlpha(float)estão disponíveis a partir de apenas o nível API 11.
sschuberth
a diferença é que o intervalo aceitável é 0-1 para o flutuante um e 0-255 para o int.
ataulm
232

É mais fácil que a outra resposta. Há um valor xml alphaque recebe valores duplos.

android:alpha="0.0" isso é invisível

android:alpha="0.5" transparente

android:alpha="1.0" totalmente visível

É assim que funciona.

jfcogato
fonte
15
Existe setAlpha(float)e android:alphasomente desde a API 11 (Android 3.0). Antes da API 11, é necessário usar o código para definir alfa para a imagem. Como sschuberth já disse em anser acima.
ALPC
@Antonio Why? Esta resposta não adiciona nenhuma informação em cima da minha e, pelo contrário, é menos completa.
sschuberth
@sschuberth, sua resposta está completamente correta, mas a falta de um exemplo pode fazer com que essa resposta tome mais atenção do que a sua. Embora sua resposta forneça mais informações, essa resposta fornece uma solução mais próxima do que eu realmente preciso. Por favor, adicione alguns exemplos para usar o que você explicou, que absolutamente ajudará!
Antonio
@Antonio Done. Eu fiz a minha resposta agora super-duper-over-verbose ;-)
sschuberth
53

Não tenho certeza sobre o XML, mas você pode fazê-lo por código da seguinte maneira.

ImageView myImageView = new ImageView(this);
myImageView.setAlpha(xxx);

Na pré-API 11:

  • o intervalo é de 0 a 255 (inclusive), 0 sendo transparente e 255 sendo opaco.

Na API 11+:

  • o intervalo é de 0f a 1f (inclusive), sendo 0f transparente e 1f opaco.
Umesh
fonte
2
Sim eu sei. (Eu esperava que isso estivesse implícito na pergunta.) Um ponto do XML é remover parte desse código. Não faz sentido para mim por alphaque não tem uma contrapartida de atributo XML quando vários tamanhos, posições têm.
SK9
Eu me pergunto: por que isso foi preterido? é porque agora eles têm um parâmetro float?
desenvolvedor android
Sim, você pode usar o imageView.setAlpha (1.0f), mas requer o nível 11. da API.
Tony Ceralva 30/10
12

Talvez uma alternativa útil para um fundo de cor lisa :

Coloque um LinearLayout sobre o ImageView e use o LinearLayout como um filtro de opacidade. A seguir, um pequeno exemplo com fundo preto:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF000000" >

<RelativeLayout
    android:id="@+id/relativeLayout2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon_stop_big" />

    <LinearLayout
        android:id="@+id/opacityFilter"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#CC000000"
        android:orientation="vertical" >
    </LinearLayout>
</RelativeLayout>

Varie o atributo android: background do LinearLayout entre # 00000000 (totalmente transparente) e # FF000000 (totalmente opaco).

marnaish
fonte
1
Não é realmente o melhor a fazer para resolver o alfa de um problema de imagem, especialmente no dispositivo de telefone.
Prakash Nadar
Isso funciona muito bem quando você deseja tornar o plano de fundo transparente, mas NÃO o filho. Usando alfa no recipiente pai, faz com que todas as suas criança transparente demais
noni
8

Agora existe uma alternativa XML:

        <ImageView
        android:id="@+id/example"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/example"
        android:alpha="0.7" />

É: android: alpha = "0.7"

Com um valor de 0 (transparente) a 1 (opaco).

Feiticeiro
fonte
4

use android: alpha = 0.5 para obter a opacidade de 50% e transformar os ícones de materiais do Android de preto para cinza.

Sachiin Gupta
fonte
4

setAlpha(int)foi descontinuado a partir da API 16:Android 4.1

Utilize setImageAlpha(int)vez

Alen Lee
fonte
3

Use este formulário para a versão antiga do android.

ImageView myImageView;
myImageView = (ImageView) findViewById(R.id.img);

AlphaAnimation alpha = new AlphaAnimation(0.5F, 0.5F);
alpha.setDuration(0); 
alpha.setFillAfter(true); 
myImageView.startAnimation(alpha);
Rafael
fonte
0

O alfa pode ser definido junto com a cor usando o seguinte formato hexadecimal #ARGB ou #AARRGGBB. Consulte http://developer.android.com/guide/topics/resources/color-list-resource.html

Conceder
fonte
Eu quero definir o alfa de uma imagem usando um atributo XML. Isso ajuda?
SK9
Estou usando isso para exibir e criar layouts sobre um layout com uma imagem de plano de fundo. Certamente você definiria o alfa de uma imagem na própria imagem?
Grant
O que você quer dizer com "na própria imagem"? Dentro do XML? Pode ser uma supervisão, mas não há atributo XML alfa.
SK9
Quero dizer, quando você cria a imagem, adiciona uma camada de transparência e define a opacidade da imagem para 50 ou o valor que você precisar.
Grant
Estou muito surpreso que o andróide: tonalidade não tem efeito. Ele permite um valor alfa ... mas não afeta uma imagem em branco: - (((((
Someone Somewhere