使自定义Android SurfaceView透明

可能重复:
如何使表面视图透明

我正在尝试使自定义表面视图半透明。 目前该活动是透明的,所以我可以在它下面看到活动,但只要我添加20dp * 20 dp的自定义视图(称为ControlsOverlayView),它就会在屏幕上显示为黑色方块。 我看过这篇文章如何在Android中使ListView透明? 并试图设置背景颜色,缓存提示和视图的阿尔法无济于事。

控制视图的透明活动是ControlsOverlayActivity.java:

public class ControlsOverlayActivity extends Activity {

    private ControlsOverlayView overlay;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        TextView textView = (TextView) findViewById(R.id.test_text);
        try {
            textView.setText("test");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
}

包含示例TextView和我的自定义ControlsOverlayView的test.xml布局是:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/test"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <TextView android:id="@+id/test_text"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

  <wp.ui.ControlsOverlayView
    android:layout_width="20dp"
    android:layout_height="20dp" 
    android:background="#00000000"
    android:cacheColorHint="#00000000"
    android:alpha="0"
    />

</FrameLayout>

并查看:

public class ControlsOverlayView extends SurfaceView implements Runnable, Callback{

    public ControlsOverlayView(Context context, AttributeSet attrs) {
        super(context, attrs);

        // make sure we get key events
        setFocusable(true);
        setFocusableInTouchMode(true);
        requestFocus();

        // register our interest in hearing about changes to our surface
        getHolder().addCallback(this);
    }

    @Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        //resize(getWidth(), getHeight());
        //paintControls();

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
    }

}

也在我的清单中我有:

<activity android:name=".ui.ControlsOverlayActivity" android:theme="@style/Theme.Transparent">
        </activity>

并且Theme.Transparent被定义为:

<style name="Theme.Transparent" parent="android:Theme">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:backgroundDimEnabled">false</item>
  </style>

同样,只是自定义视图不能变得透明。 有任何想法吗?


显然,因为你是从SurfaceView继承你不能获得透明度,请参阅StackOverflow答案制作SurfaceView透明

链接地址: http://www.djcxy.com/p/66769.html

上一篇: Making Custom Android SurfaceView Transparent

下一篇: Layered SurfaceViews in a FrameLayout in Android