2012-01-05 11 views
2

9パッチ画像をフォローしてドロップシャドウ効果を作ります。9パッチドロップシャドーテクニックは画像​​表示では機能しますが、カメラプレビューでは機能しません

enter image description here

これは、次の画像表示のためにかなりよく働きます。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="#FFFFFF" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:gravity="center" > 
    <ImageView 
      android:id="@+id/image_test" 
      android:background="@drawable/dropshadow" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/pic1" 
      />  
</LinearLayout> 

私は完璧なシャドウ効果を得ることができます。画像右/下に1ピクセル幅の赤線があることに注意してください。私は故意に9ピクセルの画像から元の画像を隠すピクセルがないことを証明するために、画像の右/下に1ピクセル幅の赤い線を置きます。しかし

enter image description here

、私はカメラのプレビュービュー上の正確な同じ技術を適用しようとすると、物事が複雑化。私はAPIのわずかな変更を行います。com.example.android.apis.graphics.CameraActivity

以下の変更を行ってGUIビューを変更します。

class Preview extends ViewGroup implements SurfaceHolder.Callback { 
    // ... 
    Preview(Context context) { 
     // ... 
     mSurfaceView.setBackgroundDrawable(getResources().getDrawable(drawable.dropshadow)); 
     this.setBackgroundColor(Color.WHITE); 
     // ... 
    } 
} 

次の結果が得られます。影の効果は、画像の右端と下端の終わりの前に現れ始めることに注意してください。エッジの端に達するまでの距離は9ピクセルです。

enter image description here

私は両方のプロジェクトのための正しいイメージファイル名dropshadow.9.pngを持っていますかなり確信しています。しかし、後者が期待どおりに機能しない理由がわかりません。

答えて

4

SurfaceViewを使用しているため、9つのパッチイメージで定義したコンテンツ境界を尊重しない専用の描画面が得られるからです。

考えられる回避策は、カメラのSurfaceViewを、ドロップシャドウを背景として保持する少し大きめのビューの上に置くことです。