【问题标题】:setAlpha behaving weirdsetAlpha 行为怪异
【发布时间】:2017-06-28 23:23:39
【问题描述】:

我使用 windowmanager 添加了一个带有特殊参数的视图,它覆盖了屏幕,我正在尝试使用搜索栏更改此视图的 alpha。我尝试更改按钮的 alpha 只是为了测试我的代码,它可以正常工作,但是当我尝试更改覆盖视图的 alpha 时,它只是将颜色更改为透明黑色(通常是透明的粉红色或黄色) .我希望改变黄色或粉红色的不透明度,但它似乎并没有那样工作。我认为这是因为特殊的参数,或者它是使用 windowmanager 添加的。 float alpha = intent.getExtras().getFloat("alpha"); 是从我的主要活动中传递下来的,是我的 seekbar(max = 100)/100 的进度,所以它最终的值是 0.0 到 1.0。如果有人有任何想法,请告诉我,谢谢。这是服务:

`public class DrawOverAppsService extends Service {

    public static final String TAG = "DrawOverAppsService";



    View mOverlayView;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        Log.d(TAG, "onCreate");


        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN|
                        WindowManager.LayoutParams.FLAG_DIM_BEHIND,
                PixelFormat.TRANSLUCENT);

        // An alpha value to apply to this entire window.
        // An alpha of 1.0 means fully opaque and 0.0 means fully transparent
        params.alpha = 0.2F;

        // When FLAG_DIM_BEHIND is set, this is the amount of dimming to apply.
        // Range is from 1.0 for completely opaque to 0.0 for no dim.
        params.dimAmount = 0.5F;

        WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);


        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


        mOverlayView = inflater.inflate(R.layout.overlay_view, null);

        wm.addView(mOverlayView, params);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (mOverlayView != null) {
            Boolean isBlack = intent.getExtras().getBoolean("black");
            Boolean isPink = intent.getExtras().getBoolean("pink");
            Boolean isOrange = intent.getExtras().getBoolean("orange");
            Boolean isAlpha = intent.getExtras().getBoolean("isAlpha");

            if(isBlack == true) {
                mOverlayView.setBackgroundColor(Color.parseColor("#000000"));
            }
            if(isPink == true) {
                mOverlayView.setBackgroundColor(Color.parseColor("#3d0d00"));
            }
            if(isOrange == true) {
                mOverlayView.setBackgroundColor(Color.parseColor("#3d2f00"));
            }
            if (isAlpha == true) {
                float alpha = intent.getExtras().getFloat("alpha");

                mOverlayView.getBackground().setAlpha((int)alpha);
                //mOverlayView.setAlpha(intent.getExtras().getFloat("alpha"));

            }

        }
        return START_NOT_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        Log.d(TAG, "onDestroy");

            WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
            wm.removeView(mOverlayView);


    }
}`

【问题讨论】:

  • 更改 mOverlayView 的颜色可以正常工作,但更改 alpha 则不行。
  • 看看WindowManager的updateViewLayout()使用布局参数设置alpha。
  • 哇,谢谢!这正是我所需要的。出于某种原因,我还需要将intent.putExtra("alpha", alpha.getProgress()/100;); 更改为Float alpha2 = alpha.getProgress()/100f; intent.putExtra("alpha", alpha2); 我认为它们会是相同的,但我想不会!感谢您的帮助。
  • alpha.getProgress() 是一个 int,因此 int/int 向下舍入为零。 alpha.getProgress()/100 将是零(如果 getProgress() getProgress() == 100)。
  • @Cheticamp 很抱歉向您寻求这么多帮助,但如果您不介意,您可以看看我的新问题吗?非常感谢到目前为止的帮助。 link

标签: android alpha


【解决方案1】:

打开()

mOverlayView .animate().scaleX(1.0f).scaleY(1.0f).setDuration(200)
                .start();
        mOverlayView .setAlpha(0.5f);

关闭()

mOverlayView .animate().scaleX(0f).scaleY(0f).setDuration(200).start();

【讨论】:

  • 感谢您的回答,我已经以不同的方式解决了它,但我会赞成这个尝试帮助我。
猜你喜欢
  • 2019-11-03
  • 2012-08-05
  • 2012-12-03
  • 2023-03-02
相关资源
最近更新 更多