web-dev-qa-db-ja.com

setAlphaとsetImageAlphaの違い

ImageView には、2つのメソッド関連メソッドがあります: setAlpha および setImageAlpha 。前者はAPIレベル1以降で使用可能ですが、レベル16以降では非推奨です。後者はレベル16以降で使用可能です。別の setAlpha メソッドもあります。 View クラス。これはAPIレベル11で導入されました。

ImageView#setAlphaとImageView#setImageAlphaの違いは、命名のみですか?行動の違いはありますか? View#setAlphaとImageView#setAlphaの関係は何ですか?

29
kolistivra

ImageView.setAlpha(int)は、APIレベル11で導入された新しいメソッドImageView.setImageAlpha(int)との混乱を避けるためにView.setAlpha(float)に名前が変更されました。

View.setAlpha(float)は、Viewを含むすべてのImageViewで使用できる一般的なメソッドです。指定された不透明度をビュー全体に適用します。これを実現するために、デフォルトでは、システムは通常のようにビューが描画される一時バッファー(ハードウェアレイヤー)を作成し、指定されたアルファ値でバッファーが画面に描画されます。これは、バッファの初期割り当てを必要とする2パスメカニズムであるため、多少遅くなります。詳細およびデフォルトの動作を変更する方法については、このビデオを参照してください: Hidden Cost of TransparencyImageViewには、バックグラウンドがない場合、このバッファ割り当てを回避する最適化がデフォルトで含まれていることに注意することが重要です。したがって、ImageViewの場合、ImageView.setAlpha(float)背景はありません。

ImageView.setImageAlpha(int)(およびImageView.setAlpha(int))は、ImageViewに固有のメソッドです。これらは、中間パスを使用せずに、画面にコンテンツ画像(ビットマップまたはその他)を直接描画するために使用されるアルファ値を制御するため、ImageView 。もちろん、ImageViewに半透明にしたい背景Drawableを設定した場合、このメソッドは期待した結果を生成しません。

47
BladeCoder
  • View.setAlpha(float)は、入力として浮動小数点数を受け入れ、0〜1の範囲の値を予期します。
  • ImageView.setAlpha(int)は、入力としてintを受け入れ、範囲0..255の値を期待します。 ImageView.setAlpha(int)は非推奨です。これはおそらく、元のView.setAlpha(float)との競合を削除したかったためです。
  • 他のレスポンダーが指摘しているように、ImageView.setImageAlpha(int)は単に非推奨のImageView.setAlpha(int)を呼び出すだけです。 ImageView.setAlpha(int)は今後のAPIアップデートで削除されることを期待する必要があるため、使用を避ける必要があります。
27
Dean

はい、名前の違いにすぎません-APIレベル16のAndroidソースの現在の実装は次のとおりです。

/**
 * Sets the alpha value that should be applied to the image.
 *
 * @param alpha the alpha value that should be applied to the image
 *
 * @see #getImageAlpha()
 */
@RemotableViewMethod
public void setImageAlpha(int alpha) {
    setAlpha(alpha);
}
4
cania

名前だけが違いだと思います。 setImageAlpha()setAlpha()よりも具体的だからです。 View#setAlphaImageView#setAlpha/setImageAlphaには直接の関係はありません。ViewクラスにはsetAlphaがあります。これは、View#ImageViewの親として機能し、コンテナーのように機能する可能性があるためです。

setAlphaを使用すると、コンテナ全体の不透明度を設定でき、そのメソッドが必要になります。 setImageAlphaを使用すると、コンテナ全体ではなく画像のみのアルファを設定できます。

これに加えて、私は彼らが両方のアルファ方法を持っている理由を本当に考えることができません。

1
Crimson