{"record":{"id":"b0395f962a28761c","repo":"material-components/material-components-android","slug":"setting-alpha-on-is-not-supported","errorCode":null,"errorMessage":"Setting alpha on is not supported","messagePattern":"Setting alpha on is not supported","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"lib/java/com/google/android/material/transition/MaterialContainerTransform.java","lineNumber":1337,"sourceCode":"            @Override\n            public void run(Canvas canvas) {\n              endView.draw(canvas);\n            }\n          });\n    }\n\n    private void maybeDrawContainerColor(Canvas canvas, Paint containerPaint) {\n      // Fill the container at the current layer with a color. Useful when the start or end view\n      // does not have a background or when the container size exceeds the image size which it can\n      // in large start/end size changes.\n      if (containerPaint.getColor() != Color.TRANSPARENT && containerPaint.getAlpha() > 0) {\n        canvas.drawRect(getBounds(), containerPaint);\n      }\n    }\n\n    @Override\n    public void setAlpha(int alpha) {\n      throw new UnsupportedOperationException(\"Setting alpha on is not supported\");\n    }\n\n    public void setColorFilter(@Nullable ColorFilter colorFilter) {\n      throw new UnsupportedOperationException(\"Setting a color filter is not supported\");\n    }\n\n    @Override\n    public int getOpacity() {\n      return PixelFormat.TRANSLUCENT;\n    }\n\n    private void setProgress(float progress) {\n      if (this.progress != progress) {\n        updateProgress(progress);\n      }\n    }\n\n    private void updateProgress(float progress) {","sourceCodeStart":1319,"sourceCodeEnd":1355,"githubUrl":"https://github.com/material-components/material-components-android/blob/ac7e18efeefb331850c561faf9ab8bf81d27ba68/lib/java/com/google/android/material/transition/MaterialContainerTransform.java#L1319-L1355","documentation":"MaterialContainerTransform draws its progress via a private Drawable (MaterialContainerTransform.java:1337) that overrides setAlpha to throw UnsupportedOperationException. The drawable's visuals are driven entirely by internal progress values and paints; delegating alpha to it would break the layered crossfade model, so the operation is deliberately unsupported rather than silently ignored.","triggerScenarios":"Obtaining the transition drawable (e.g. via the transform's view overlay during the animation) and calling setAlpha() on it; generic animation utilities that walk a hierarchy of drawables and call setAlpha on each; test code poking the drawable's Paint/alpha API surface.","commonSituations":"Custom scrubbing/debug tooling that manipulates drawables generically; reusing a drawable-inspection helper across all on-screen drawables while a container transform is running.","solutions":["Do not call setAlpha on the transform's drawable; control appearance via MaterialContainerTransform's own API (progress, fadeMode, containerColor).","In generic drawable-walking utilities, guard with a capability check (try a no-op probe or skip package-private drawables from material.transition).","If you need custom alpha animation, wrap the transitioning views' alpha instead of the internal drawable."],"exampleFix":"// before\nfor (Drawable d : overlay.getDrawables()) d.setAlpha(128); // crashes on transform drawable\n\n// after\nfor (Drawable d : overlay.getDrawables()) {\n  if (!(d instanceof MaterialContainerTransform drawableCompatMarker)) {\n    d.setAlpha(128);\n  }\n}\n// practically: filter by class name starting with \"com.google.android.material.transition\" or avoid touching internal drawables","handlingStrategy":"validation","validationCode":"boolean isInternalTransformDrawable(Drawable d) {\n  return d != null && d.getClass().getName().startsWith(\"com.google.android.material.transition\");\n}\n// in any generic drawable walker:\nif (!isInternalTransformDrawable(d)) d.setAlpha(alpha);","typeGuard":null,"tryCatchPattern":"try { d.setAlpha(a); } catch (UnsupportedOperationException e) { /* drawable rejects alpha; skip */ } // acceptable in generic utilities only","preventionTips":["Never call setAlpha on drawables you do not own.","Scope drawable-walking utilities to your own drawables or filter out framework/library internals.","Control container-transform appearance via its public setters."],"tags":["android","material-components","container-transform","drawable","unsupported-operation"],"backgroundTag":null,"analyzedSha":"ac7e18efeefb331850c561faf9ab8bf81d27ba68","analyzedAt":"2026-08-14T15:35:35.735Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}