-
Notifications
You must be signed in to change notification settings - Fork 24.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rotate transform not working well on View with borderRadius #18266
Comments
This comment has been minimized.
This comment has been minimized.
Reviewed By: shergin Differential Revision: D5917111 fbshipit-source-id: e3d97f26b6aada199f700ec6659ace0d7dffd4c5
Reviewed By: achen1 Differential Revision: D5982241 fbshipit-source-id: 2f694daca7e1b16b5ff65f07c7d15dd558a4b7e8
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
1 similar comment
This comment has been minimized.
This comment has been minimized.
I was able to solve this from removing |
I have a similar issue, latest RN (0.54) and no |
0.55.2 the same |
I was able to get |
This comment has been minimized.
This comment has been minimized.
Hey @brunolemos! Your problem reproduces on React Native ~0.55.2. As evidence, here's a screenshot: But I also ran your code against React Native master and saw that the rounded border rendering has been fixed. Screenshot: However, it still looks like clipping is broken (with rounded borders). Code: https://snack.expo.io/Hyc6HMPxX Edit: I did some digging around and narrowed it down to the I'll look into this a bit further. |
Yup, so this wasn't a React Native issue; it was an AOSP bug. I just tested clipping in API 26, API 27, and API 28, and verified that it was broken in API 26, and 27, but was working in API 28. Code: https://snack.expo.io/Skj_iWjxX React Native v0.55.0 running on my S8 (Android 8.0, API 26): React Native master, running on API 28 emulator: So, rounded border rendering works as expected under transformations. Also, clipping works as expected for sufficiently new devices. @hramos, can we close this issue? |
Everything worked fine on |
From my understanding, there were two problems here.
So really, From where I stand, I see two options:
Previously, I was leaning more toward the first option. That's why I suggested that we should close this issue. But now that I think about it a bit more, I'm not sure what the best approach is. Any thoughts, @shergin? Edit 1: I'll do some more thorough testing and see if things actually are working. |
This comment has been minimized.
This comment has been minimized.
Tagged as a regression so the bot does not close this due to staleness. Thanks @RSNara for the writeup. |
This comment has been minimized.
This comment has been minimized.
I also still have this issue on some devices. |
I also still have this issue on Android 8.0.0(honer EMUI 8.0.0) when i use "overflow:'hidden'" and " transform: [{ rotate: "45deg" }]". React And ReactNative Version: |
so why is this closed ? as this clearly still happens. I assume the RN implementation uses |
Im not sure whether it is an Android or React Native issue, but here is what is working using RN 0.59.8: |
Based on @tominou ‘s table above, this is an OS bug? If that’s the case, is the best option to document this properly with a PR that includes the above table? |
Is there any workaround for this? Currently facing it myself on Android 28 and haven't found any success in my searches for a fix. |
We are also running into this issue. Tried removing individual border radius widths and sizes, however that breaks specifying different border radius colours for each side on the affect platforms. Changing this:
To this:
Breaks the separate border colours, they are all black on android. Works on iOS. |
Summary: This sync includes the following changes: - **[b5c6dd2de](facebook/react@b5c6dd2de )**: Don't use Spread in DevTools Injection (#18277) //<Sebastian Markbåge>// - **[a463fef31](facebook/react@a463fef31 )**: Revert "[React Native] Add getInspectorDataForViewAtPoint (#18233)" //<Sebastian Markbage>// - **[dc7eedae3](facebook/react@dc7eedae3 )**: Encode server rendered host components as array tuples (#18273) //<Sebastian Markbåge>// - **[bf351089a](facebook/react@bf351089a )**: [React Native] Add getInspectorDataForViewAtPoint (#18233) //<Ricky>// - **[99d737186](facebook/react@99d737186 )**: [Flight] Split Streaming from Relay Implemenation (#18260) //<Sebastian Markbåge>// - **[160505b0c](facebook/react@160505b0c )**: ReactDOM.useEvent: Add more scaffolding for useEvent hook (#18271) //<Dominic Gannaway>// - **[526c12f49](facebook/react@526c12f49 )**: Enable enableProfilerCommitHooks flag for FB (#18230) //<Brian Vaughn>// - **[29534252a](facebook/react@29534252a )**: ReactDOM.useEvent add flag and entry point (#18267) //<Dominic Gannaway>// - **[704c8b011](facebook/react@704c8b011 )**: Fix Flow type for AnyNativeEvent (#18266) //<Dominic Gannaway>// - **[bdc5cc463](facebook/react@bdc5cc463 )**: Add Relay Flight Build (#18242) //<Sebastian Markbåge>// - **[7a1691cdf](facebook/react@7a1691cdf )**: Refactor Host Config Infra (getting rid of .inline*.js) (#18240) //<Sebastian Markbåge>// - **[238b57f0f](facebook/react@238b57f0f )**: [Blocks] Make it possible to have lazy initialized and lazy loaded Blocks (#18220) //<Sebastian Markbåge>// - **[235a6c4af](facebook/react@235a6c4af )**: Bugfix: Dropped effects in Legacy Mode Suspense (#18238) //<Andrew Clark>// - **[562cf013d](facebook/react@562cf013d )**: Add a flag to disable module pattern components (#18133) //<Dan Abramov>// - **[115cd12d9](facebook/react@115cd12d9 )**: Add test run that uses www feature flags (#18234) //<Andrew Clark>// - **[4027f2a3b](facebook/react@4027f2a3b )**: Break up require/import statements in strings (#18222) //<Christoph Nakazawa>// - **[024a76431](facebook/react@024a76431 )**: Implemented Profiler onCommit() and onPostCommit() hooks (#17910) //<Brian Vaughn>// - **[d35f8a581](facebook/react@d35f8a581 )**: feat: honor displayName of context types (#18224) //<Brian Vaughn>// - **[3ee812e6b](facebook/react@3ee812e6b )**: Revert "feat: honor displayName of context types (#18035)" (#18223) //<Dominic Gannaway>// - **[6a0efddd8](facebook/react@6a0efddd8 )**: Modern Event System: export internal FB flag for testing (#18221) //<Dominic Gannaway>// - **[fa03206ee](facebook/react@fa03206ee )**: Remove _ctor field from Lazy components (#18217) //<Sebastian Markbåge>// - **[2fe0fbb05](facebook/react@2fe0fbb05 )**: Use accumulateTwoPhaseDispatchesSingle directly (#18203) //<Dominic Gannaway>// - **[503fd82b4](facebook/react@503fd82b4 )**: Modern Event System: Add support for internal FB Primer (#18210) //<Dominic Gannaway>// - **[45c172d94](facebook/react@45c172d94 )**: feat: honor displayName of context types (#18035) //<Brian Vaughn>// - **[ec652f4da](facebook/react@ec652f4da )**: Bugfix: Expired partial tree infinite loops (#17949) //<Andrew Clark>// - **[d2158d6cc](facebook/react@d2158d6cc )**: Fix flow types (#18204) //<Brian Vaughn>// - **[7e83af17c](facebook/react@7e83af17c )**: Put React.jsx and React.jsxDEV behind experimental build (#18023) //<Luna Ruan>// - **[8cb2fb21e](facebook/react@8cb2fb21e )**: Refine isFiberSuspenseAndTimedOut (#18184) //<Dominic Gannaway>// - **[62861bbcc](facebook/react@62861bbcc )**: More event system cleanup and scaffolding (#18179) //<Dominic Gannaway>// - **[8ccfce460](facebook/react@8ccfce460 )**: Only use Rollup's CommonJS plugin for "react-art" (#18186) //<Sebastian Markbåge>// - **[c26506a7d](facebook/react@c26506a7d )**: Update react-shallow-renderer from 16.12.0 to 16.13.0 (#18185) //<Minh Nguyen>// - **[26aa1987c](facebook/react@26aa1987c )**: [Native] Enable and remove targetAsInstance feature flag. (#18182) //<Eli White>// - **[4469700bb](facebook/react@4469700bb )**: Change ReactVersion from CJS to ES module (#18181) //<Sebastian Markbåge>// - **[58eedbb02](facebook/react@58eedbb02 )**: Check in a forked version of object-assign only for UMD builds (#18180) //<Sebastian Markbåge>// - **[053347e6b](facebook/react@053347e6b )**: react-test-renderer: improve findByType() error message (#17439) //<Henry Q. Dineen>// - **[4ee592e95](facebook/react@4ee592e95 )**: Add an early invariant to debug a mystery crash (#18159) //<Dan Abramov>// - **[7ea4e4111](facebook/react@7ea4e4111 )**: Fix typo in warning text (#18103) //<Sophie Alpert>// - **[79a25125b](facebook/react@79a25125b )**: feat: add recommended config eslint rule (#14762) //<Simen Bekkhus>// - **[ae60caacf](facebook/react@ae60caacf )**: [Fabric] Fix targetAsInstance dispatchEvent "cannot read property of null" (#18156) //<Joshua Gross>// - **[d72700ff5](facebook/react@d72700ff5 )**: Remove runtime dependency on prop-types (#18127) //<Dan Abramov>// - **[549e41883](facebook/react@549e41883 )**: Move remaining things to named exports (#18165) //<Sebastian Markbåge>// - **[739f20bed](facebook/react@739f20bed )**: Remove Node shallow builds (#18157) //<Sebastian Markbåge>// - **[3e809bf5d](facebook/react@3e809bf5d )**: Convert React Native builds to named exports (#18136) //<Sebastian Markbåge>// - **[869dbda72](facebook/react@869dbda72 )**: Don't build shallow renderer for FB (#18153) //<Dan Abramov>// - **[293878e07](facebook/react@293878e07 )**: Replace ReactShallowRenderer with a dependency (#18144) //<Minh Nguyen>// - **[b4e314891](facebook/react@b4e314891 )**: Remove unused flag (#18132) //<Dan Abramov>// - **[849e8328b](facebook/react@849e8328b )**: Remove unnecessary warnings (#18135) //<Dan Abramov>// - **[f9c0a4544](facebook/react@f9c0a4544 )**: Convert the rest of react-dom and react-test-renderer to Named Exports (#18145) //<Sebastian Markbåge>// - **[c1c5499cc](facebook/react@c1c5499cc )**: update version numbers for 16.13 (#18143) //<Sunil Pai>// - **[e1c7e651f](facebook/react@e1c7e651f )**: Update ReactDebugHooks to handle composite hooks (#18130) //<Brian Vaughn>// - **[d28bd2994](facebook/react@d28bd2994 )**: remove OSS testing builds (#18138) //<Sunil Pai>// - **[8e13e770e](facebook/react@8e13e770e )**: Remove /testing entry point from 'react' package (#18137) //<Sebastian Markbåge>// - **[60016c448](facebook/react@60016c448 )**: Export React as Named Exports instead of CommonJS (#18106) //<Sebastian Markbåge>// - **[8d7535e54](facebook/react@8d7535e54 )**: Add nolint to FB bundle headers (#18126) //<Dominic Gannaway>// - **[bf13d3e3c](facebook/react@bf13d3e3c )**: [eslint-plugin-react-hooks] Fix cyclic caching for loops containing a… (#16853) //<Moji Izadmehr>// - **[501a78881](facebook/react@501a78881 )**: runAllPassiveEffectDestroysBeforeCreates's feature flag description typo fixed (#18115) //<adasq>// - **[09348798a](facebook/react@09348798a )**: Codemod to import * as React from "react"; (#18102) //<Sebastian Markbåge>// - **[78e816032](facebook/react@78e816032 )**: Don't warn about unmounted updates if pending passive unmount (#18096) //<Brian Vaughn>// - **[2c4221ce8](facebook/react@2c4221ce8 )**: Change string refs in function component message (#18031) //<Sebastian Markbåge>// - **[65bbda7f1](facebook/react@65bbda7f1 )**: Rename Chunks API to Blocks (#18086) //<Sebastian Markbåge>// - **[8b596e00a](facebook/react@8b596e00a )**: Remove unused arguments in the reconciler (#18092) //<Dan Abramov>// - **[5de5b6150](facebook/react@5de5b6150 )**: Bugfix: `memo` drops lower pri updates on bail out (#18091) //<Andrew Clark>// - **[abfbae02a](facebook/react@abfbae02a )**: Update Rollup version to 1.19.4 and fix breaking changes (#15037) //<Kunuk Nykjær>// - **[b789060dc](facebook/react@b789060dc )**: Feature Flag for React.jsx` "spreading a key to jsx" warning (#18074) //<Sunil Pai>// - **[3f85d53ca](facebook/react@3f85d53ca )**: Further pre-requisite changes to plugin event system (#18083) //<Dominic Gannaway>// - **[ea6ed3dbb](facebook/react@ea6ed3dbb )**: Warn for update on different component in render (#17099) //<Andrew Clark>// - **[085d02133](facebook/react@085d02133 )**: [Native] Migrate focus/blur to call TextInputState with the host component (#18068) //<Eli White>// - **[1000f6135](facebook/react@1000f6135 )**: Add container to event listener signature (#18075) //<Dominic Gannaway>// - **[a12dd52a4](facebook/react@a12dd52a4 )**: Don't build some packages for WWW (#18078) //<Dan Abramov>// - **[2512c309e](facebook/react@2512c309e )**: Remove Flare bundles from build (#18077) //<Dominic Gannaway>// - **[4912ba31e](facebook/react@4912ba31e )**: Add modern event system flag + rename legacy plugin module (#18073) //<Dominic Gannaway>// - **[4d9f85006](facebook/react@4d9f85006 )**: Re-throw errors thrown by the renderer at the root in the complete phase (#18029) //<Andrew Clark>// - **[14afeb103](facebook/react@14afeb103 )**: Added missing feature flag //<Brian Vaughn>// - **[691096c95](facebook/react@691096c95 )**: Split recent passive effects changes into 2 flags (#18030) //<Brian Vaughn>// - **[56d8a73af](facebook/react@56d8a73af )**: [www] Disable Scheduler `timeout` w/ dynamic flag (#18069) //<Andrew Clark>// - **[d533229fb](facebook/react@d533229fb )**: Fix Prettier //<Dan Abramov>// - **[56a8c3532](facebook/react@56a8c3532 )**: [email protected] //<Dan Abramov>// - **[93a229bab](facebook/react@93a229bab )**: Update eslint rule exhaustive deps to use new suggestions feature (#17385) //<Will Douglas>// - **[9def56ec0](facebook/react@9def56ec0 )**: Refactor DOM plugin system to single module (#18025) //<Dominic Gannaway>// - **[2d6be757d](facebook/react@2d6be757d )**: [Native] Delete NativeComponent and NativeMethodsMixin (#18036) //<Eli White>// - **[d4f2b03](facebook/react@d4f2b0379 )**: Add Auto Import to Babel Plugin (#16626) //<Luna Ruan>// - **[8777b44e9](facebook/react@8777b44e9 )**: Add Modern WWW build (#18028) //<Dan Abramov>// - **[a607ea4c4](facebook/react@a607ea4c4 )**: Remove getIsHydrating (#18019) //<Dan Abramov>// - **[f7278034d](facebook/react@f7278034d )**: Flush all passive destroy fns before calling create fns (#17947) //<Brian Vaughn>// - **[529e58ab0](facebook/react@529e58ab0 )**: Remove legacy www config from Rollup build (#18016) //<Dominic Gannaway>// - **[42918f40a](facebook/react@42918f40a )**: Change build from babylon to babel (#18015) //<Dominic Gannaway>// - **[df5faddcc](facebook/react@df5faddcc )**: Refactor commitPlacement to recursively insert nodes (#17996) //<Dominic Gannaway>// - **[517de74b0](facebook/react@517de74b0 )**: Tweak comment wording (#18007) //<Dan Abramov>// - **[b63cb6f6c](facebook/react@b63cb6f6c )**: Update ReactFiberExpirationTime.js (#17825) //<haseeb>// - **[89c6042df](facebook/react@89c6042df )**: fix: typo in test (#18005) //<Jesse Katsumata>// - **[4f71f25a3](facebook/react@4f71f25a3 )**: Re-enable shorthand CSS property collision warning (#18002) //<Sophie Alpert>// - **[c55c34e46](facebook/react@c55c34e46 )**: Move React Map child check to behind flags or __DEV__ (#17995) //<Dominic Gannaway>// - **[3f814e758](facebook/react@3f814e758 )**: Fix Flow type for React Native (#17992) //<Dan Abramov>// - **[256d78d11](facebook/react@256d78d11 )**: Add feature flag for removing children Map support (#17990) //<Dominic Gannaway>// - **[9dba218d9](facebook/react@9dba218d9 )**: [Mock Scheduler] Mimic browser's advanceTime (#17967) //<Andrew Clark>// - **[d6e08fe0a](facebook/react@d6e08fe0a )**: Remove Suspense priority warning (#17971) //<Dan Abramov>// - **[812277dab](facebook/react@812277dab )**: Fix onMouseEnter is fired on disabled buttons (#17675) //<Alfredo Granja>// - **[3e9251d60](facebook/react@3e9251d60 )**: make testing builds for React/ReactDOM (#17915) //<Sunil Pai>// - **[ace9e8134](facebook/react@ace9e8134 )**: Simplify Continuous Hydration Targets (#17952) //<Sebastian Markbåge>// - **[7df32c4c8](facebook/react@7df32c4c8 )**: Flush `useEffect` clean up functions in the passive effects phase (#17925) //<Brian Vaughn>// - **[434770c3b](facebook/react@434770c3b )**: Add beforeRemoveInstance method to ReactNoop (#17959) //<Dominic Gannaway>// - **[6ae2c33a7](facebook/react@6ae2c33a7 )**: StrictMode should call sCU twice in DEV (#17942) //<Brian Vaughn>// - **[9dbe1c54d](facebook/react@9dbe1c54d )**: Revert "Bugfix: Expiring a partially completed tree (#17926)" (#17941) //<Andrew Clark>// - **[b2382a715](facebook/react@b2382a715 )**: Add ReactDOM.unstable_renderSubtreeIntoContainer warning flag (#17936) //<Dominic Gannaway>// - **[01974a867](facebook/react@01974a867 )**: Bugfix: Expiring a partially completed tree (#17926) //<Andrew Clark>// Changelog: [General][Changed] - React Native sync for revisions 241c446...b5c6dd2 Reviewed By: gaearon Differential Revision: D20347361 fbshipit-source-id: e9e6282474ab6471585e8e7fb6ea8518aa48390d
Still seen at 0.61.5 and Android SDK 25, but not seen at Android SDK 29, seems using |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
The issue is caused from the canvas cropping on a // Disable Hardware Accelleration on Views with property overflow hidden
// for SDK 24-28 https://github.com/facebook/react-native/issues/18266
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
&& Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
setLayerType(View.LAYER_TYPE_HARDWARE, null);
} before react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java Lines 862 to 863 in 4f5a092
Result in the example from @RSNara comment before and after the fix. The issue was caused from react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java Lines 849 to 860 in 4f5a092
The original expo snack posted from @brunolemos does not reproduce anymore on react-native master, but the issue in the above example from @RSNara still reproduces. The issue and solution was tested on Physical Devices and Emulators running Android Sdk 24-29, my pull request will explicitly set the I am preparing the pull request. Thanks a lot for reading this message 😃 |
This happened in react-native 0.61.0. When set rotate and border Radius and overflow hidden to the parent, the child works fine, but when I set background color to children, parent border radius does not work. |
Same shit different day😭 |
The same problem was found on Samsung S8. |
So what the hell shall we do? :/ |
You could try fixing this by using prop https://reactnative.dev/docs/view#rendertohardwaretextureandroid
My pr would just enable hardware accelleration on that view after applying the border radius, but you could solve this issue by enabling hardware accelleration on the view in Javascript for Android API N till P react-native/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java Lines 267 to 270 in e6658a2
the prop allows you to call react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java Lines 120 to 122 in 1465c8f
|
Hi thanks for informing us about this, Looks like your pr isn't merged yet, also would you mind talking about the limitations? Docs are a little unclear. It says turn this off before animation because you can use a limited amount of video memory, we only need it when we have the animation otherwise what's the point? |
I reply to @Stevemoretz comment on my post #18266 (comment)
You just need to enable hardware accelleration for the duration of the animation on the View, as tested in my pr #28881 it fixes this issue. you only apply this change for a limited number of Android APIs (from n till p) CLICK TO OPEN TESTS RESULTS
The solution uses The change is applied only to Views with overflow hidden running on sdk 24-28. The below screenshots are from The screenshot on the left displays how the
The below tests performed with |
It sounds great but a couple of questions what happens for sdks below 24 and it could be great if you provided a code example, I don't exactly get how to do this use a state and change it before and after animation starts and ends? Also when do you think your pr get merged? |
This issue is stale because it has been open 180 days with no activity. Remove stale label or comment or this will be closed in 7 days. |
The issue still persists in React Native 0.73. The solution is to set the |
When rotating a component, its children also rotate as expected, except for the
View
s withborderRadius > 0
, which their rounded border does not rotate.Environment
Environment:
OS: macOS High Sierra 10.13.3
Node: 8.9.0
Yarn: 1.5.1
npm: 5.7.1
Watchman: 4.9.0
Xcode: Xcode 9.2 Build version 9C40b
Android Studio: 3.0 AI-171.4443003
Packages: (wanted => installed)
react: ^16.3.0-alpha.1 => 16.3.0-alpha.1
react-native: ^0.54.0 => 0.54.0
Expected Behavior
Borders should rotate like everything else.
Actual Behavior
Steps to Reproduce
[ANDROID] https://snack.expo.io/@brunolemos/react-native---border-radius-rotate-bug
Full Code
Investigating + Related
After more investigation this is what I found:
rotate + borderRadius > 0 + overflow:hidden
bug introduced on 0.50.0; (30044fd?)rotate + borderRadius > 0 + borderWidth > 0
bug introduced on 0.51.0; (4994d6a?)Possibly related:
The text was updated successfully, but these errors were encountered: