vinc3m1/RoundedImageView
A fast ImageView that supports rounded corners, ovals, and circles.
Stale — last commit 3y ago
weakest axisnon-standard license (Other); last commit was 3y ago…
no tests detected; no CI workflows detected…
Documented and popular — useful reference codebase to read through.
last commit was 3y ago; no CI workflows detected
- ✓17 active contributors
- ✓Other licensed
- ⚠Stale — last commit 3y ago
Show all 7 evidence items →Show less
- ⚠Concentrated ownership — top contributor handles 76% of recent commits
- ⚠Non-standard license (Other) — review terms
- ⚠No CI workflows detected
- ⚠No test directory detected
What would change the summary?
- →Use as dependency Concerns → Mixed if: clarify license terms
- →Fork & modify Mixed → Healthy if: add a test suite
- →Deploy as-is Mixed → Healthy if: 1 commit in the last 180 days
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Great to learn from" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/vinc3m1/roundedimageview)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/vinc3m1/roundedimageview on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: vinc3m1/RoundedImageView
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/vinc3m1/RoundedImageView shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Stale — last commit 3y ago
- 17 active contributors
- Other licensed
- ⚠ Stale — last commit 3y ago
- ⚠ Concentrated ownership — top contributor handles 76% of recent commits
- ⚠ Non-standard license (Other) — review terms
- ⚠ No CI workflows detected
- ⚠ No test directory detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live vinc3m1/RoundedImageView
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/vinc3m1/RoundedImageView.
What it runs against: a local clone of vinc3m1/RoundedImageView — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in vinc3m1/RoundedImageView | Confirms the artifact applies here, not a fork |
| 2 | License is still Other | Catches relicense before you depend on it |
| 3 | Default branch main exists | Catches branch renames |
| 4 | Last commit ≤ 1227 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of vinc3m1/RoundedImageView. If you don't
# have one yet, run these first:
#
# git clone https://github.com/vinc3m1/RoundedImageView.git
# cd RoundedImageView
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of vinc3m1/RoundedImageView and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "vinc3m1/RoundedImageView(\\.git)?\\b" \\
&& ok "origin remote is vinc3m1/RoundedImageView" \\
|| miss "origin remote is not vinc3m1/RoundedImageView (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Other)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Other\"" package.json 2>/dev/null) \\
&& ok "license is Other" \\
|| miss "license drift — was Other at generation time"
# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
&& ok "default branch main exists" \\
|| miss "default branch main no longer exists"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 1227 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~1197d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/vinc3m1/RoundedImageView"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
RoundedImageView is an Android custom ImageView component that efficiently renders images with rounded corners, ovals, and circles by drawing directly onto bitmaps using Canvas operations. It was designed to minimize memory overhead and rendering cost compared to shader-based approaches, but is now archived in favor of androidx's RoundedBitmapDrawable and image loader library transformations. Simple library structure: roundedimageview/ contains the core Java library (59k LOC), example/ is a standalone Android app demonstrating usage with sample photos and fragments for ColorFragment, RoundedFragment, and PicassoFragment. No monorepo complexity; single Gradle multi-module build with library + example app.
👥Who it's for
Android developers building apps circa 2015–2020 who needed to display rounded/circular images from bundled resources or simple Bitmap sources without the overhead of full image transformation libraries. No longer recommended for new projects.
🌱Maturity & risk
Archived and no longer maintained. Built with Gradle 2.3.1, targeting SDK 25 (Android 7.1), last version 2.3.0. The README explicitly states it is archived with better alternatives available, indicating the project reached maturity but was intentionally deprecated rather than actively developed.
Critical risk: actively archived with zero ongoing maintenance. The README warns that non-bitmap drawables (especially TransitionDrawables from Picasso/Glide) perform poorly. Single maintainer (vinc3m1) with no succession plan visible. Do not use for new production Android projects; migrate existing code to RoundedBitmapDrawable or image loader transformations.
Active areas of work
Nothing. Repository is archived. The last meaningful work was documenting why the project is archived and recommending alternatives (RoundedBitmapDrawable, glide-transformations, picasso-transformations) in the README.
🚀Get running
Clone the repo: git clone https://github.com/vinc3m1/RoundedImageView.git && cd RoundedImageView. Build with Gradle Wrapper: ./gradlew build. Run the example app on an emulator: ./gradlew :example:installDebug (requires Android SDK 25+). Note: This project is archived; use androidx.core.graphics.drawable.RoundedBitmapDrawable instead for new code.
Daily commands:
Android project: open in Android Studio 2.x+, or run ./gradlew :example:assembleDebug to build APK, ./gradlew :example:installDebug to install on connected device/emulator. Requires local.properties with sdk.dir pointing to Android SDK. No traditional dev server; runs as Android app.
🗺️Map of the codebase
- roundedimageview/src/main/java/com/makeramen/roundedimageview/RoundedImageView.java: Core class implementing the ImageView subclass with Canvas-based rounding logic, ScaleType synchronization, and oval/circle rendering
- example/src/main/java/com/makeramen/roundedimageview/example/RoundedFragment.java: Primary example demonstrating programmatic usage of RoundedImageView with attributes like cornerRadius and borderWidth
- example/src/main/res/layout/fragment_rounded.xml: XML layout showing how to declare RoundedImageView in layouts and configure rounded corners via attributes
- README.md: Explicitly documents why the project is archived and directs users to RoundedBitmapDrawable, glide-transformations, and picasso-transformations as replacements
- build.gradle: Root Gradle configuration defining Gradle 2.3.1, SDK 25 target, and multi-module build setup for library + example
🛠️How to make changes
Core rounding logic lives in roundedimageview/src/main/java/com/makeramen/roundedimageview/ (main Java source). Modify RoundedImageView.java for rendering changes, example app fragments in example/src/main/java/com/makeramen/roundedimageview/example/ for UI demos. Layout XMLs in example/src/main/res/layout/ show usage patterns. Start with RoundedFragment.java and fragment_rounded.xml to understand typical integration.
🪤Traps & gotchas
- ScaleType synchronization between ImageView and drawable was historically problematic (noted in README). 2. TransitionDrawables from Picasso/Glide have poor support; library was designed for simple Bitmaps only. 3. Gradle 2.3.1 is very old; building on modern Android Studio may require build.gradle updates. 4. No CI/CD pipeline visible; tests absent. 5. Project is archived—GitHub will not accept PRs or issues; do not attempt contributions.
💡Concepts to learn
- Canvas clipping and shape drawing — RoundedImageView uses Canvas.drawRoundRect(), Canvas.drawCircle(), and clip operations to render rounded shapes directly; understanding Android Canvas is essential to understanding how the library avoids expensive shader operations
- ImageView ScaleType synchronization — The library struggles to keep ScaleType (CENTER_CROP, FIT_CENTER, etc.) synchronized between the outer ImageView and the internal Drawable, a core pain point mentioned in the README as a maintenance burden
- Drawable wrapping and composition — RoundedImageView wraps other Drawables but fails with TransitionDrawable and LayerDrawable from image loaders; understanding Drawable composition is key to why the library was archived
- Bitmap caching and memory overhead — The library was designed to minimize memory by drawing rounded shapes on-demand rather than pre-rendering; knowing how Android's bitmap memory model works explains the original design motivation
- Hardware acceleration in Android views — Modern Android hardware acceleration improvements reduced the need for custom Canvas-based rounding; understanding hardware layers and paint operations explains why RoundedBitmapDrawable is now preferred
- Image transformation pipelines — Image loaders like Glide and Picasso use transformation pipelines that happen in async/background threads before display; RoundedImageView's synchronous on-View approach conflicts with this modern pattern
🔗Related repos
androidx/androidx— Contains RoundedBitmapDrawable, the official recommended replacement for RoundedImageView in androidx.core.graphics.drawablewasabeef/glide-transformations— Provides circle, corner rounding, and other image transformations designed for Glide's async pipeline, recommended alternative for network-loaded imageswasabeef/picasso-transformations— Equivalent transformation library for Picasso, solving the same rounded image problem for Picasso-loaded images with better performancebumptech/glide— Industry-standard image loading library; users of RoundedImageView should use Glide with wasabeef/glide-transformations instead for new projectssquare/picasso— Alternative image loader that RoundedImageView attempted to integrate with (see PicassoFragment.java); use picasso-transformations instead
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add instrumented Android tests for RoundedDrawable rendering edge cases
The roundedimageview/src/main/java/com/makeramen/roundedimageview/RoundedDrawable.java is a critical rendering component with complex canvas operations for rounded corners, ovals, and circles. There are no visible test files in the repo structure. Adding instrumented tests would catch regressions in rendering logic across different Android API levels and verify the synchronization between ScaleTypes mentioned in the README as a maintenance pain point.
- [ ] Create roundedimageview/src/androidTest/java/com/makeramen/roundedimageview/ directory structure
- [ ] Write tests for RoundedDrawable with various corner radius values, oval/circle modes, and border configurations
- [ ] Add tests for ScaleType handling (CENTER, CENTER_CROP, CENTER_INSIDE, FIT_CENTER, etc.) to prevent regressions
- [ ] Verify rendering output matches expected dimensions and transformations using bitmap comparison or canvas verification
- [ ] Update roundedimageview/build.gradle to include androidTestImplementation dependencies (androidx.test:runner, espresso-core)
Add unit tests for RoundedTransformationBuilder configuration and validation
The RoundedTransformationBuilder.java class handles complex builder pattern logic for configuring rounded corners, but there are no visible unit tests in the repo. Adding JUnit tests would verify that the builder correctly validates inputs (e.g., negative radius, invalid corner combinations) and produces correct RoundedDrawable configurations. This is especially valuable given the README mentions 'poorly performing hacks' that should be verified as working correctly.
- [ ] Create roundedimageview/src/test/java/com/makeramen/roundedimageview/RoundedTransformationBuilderTest.java
- [ ] Write tests for valid configurations (all corners, specific corners, oval, circle modes)
- [ ] Write tests for invalid inputs and edge cases (negative values, conflicting settings)
- [ ] Test corner-specific rounding with Corner.java enum values
- [ ] Update roundedimageview/build.gradle to include testImplementation 'junit:junit:4.12' or newer
Create GitHub Actions CI workflow for automated testing and lint checks on pull requests
The repo has Gradle setup, ProGuard config (roundedimageview/release-proguard.cfg), and lint configuration (example/lint.xml) but no visible CI/CD pipeline. Adding a GitHub Actions workflow would automatically run tests, lint checks, and build verification on all PRs. This prevents regressions and reduces manual testing burden, especially important given the README acknowledges this is archived but may still receive maintenance contributions.
- [ ] Create .github/workflows/android-ci.yml with steps to: checkout code, setup Java/Android SDK, run './gradlew lint'
- [ ] Add build step: './gradlew build' to verify both example and roundedimageview modules compile
- [ ] Add test step: './gradlew test' for unit tests and './gradlew connectedAndroidTest' for instrumented tests (conditionally or with emulator setup)
- [ ] Configure workflow to trigger on pull_request and push to main/master branches
- [ ] Add status badge to README.md linking to workflow runs
🌿Good first issues
- Document migration paths in README code examples: add snippets showing how to convert existing RoundedImageView usage to RoundedBitmapDrawable with code samples for corner radius, border, and scaling. 2. Add unit tests for edge cases in RoundedImageView.java (null Drawable, zero radius, very small images) since none are visible in the file list. 3. Update example/build.gradle and build.gradle to use modern Gradle versions and SDK 30+, fixing deprecated gradle-wrapper.properties without breaking Android API level 14 support.
⭐Top contributors
Click to expand
Top contributors
- @vinc3m1 — 76 commits
- [@Sérgio Moura](https://github.com/Sérgio Moura) — 3 commits
- @josketres — 3 commits
- @dlew — 3 commits
- [@Josue Zarzosa](https://github.com/Josue Zarzosa) — 2 commits
📝Recent commits
Click to expand
Recent commits
37ab322— Update README.md (vinc3m1)0e20fec— Update README.md (vinc3m1)344228d— changed the readme (keithchad)ace0766— Copy instead of mutating existing LayerDrawable (larryng)497a2d4— Fix for OOM in Rounded Drawable (GauravGangwarZomato)c1d66da— Update README.md (vinc3m1)6a30cc9— rebuild shader on ShaderMatrix update (Nadudik Mikhail)18e8b9e— Fix broken link in README.md (kizitonwose)93032d2— bump to latest gradle (vinc3m1)dbb002e— Add Known Issues (vinc3m1)
🔒Security observations
The RoundedImageView project has significant security concerns primarily due to its archived/unmaintained status and use of severely outdated build tools and dependencies from 2017. The Gradle toolchain, Android build tools, and compileSdkVersion are all multiple years behind current standards, meaning they lack modern security patches and features. The explicit statement that the project is no longer maintained is the most critical issue, as any discovered vulnerabilities will never be patched. While there are no obvious code-level vulnerabilities (injection, hardcoded secrets, or misconfigurations detected in the provided file structure), the dependency and maintenance issues pose substantial risk. Projects depending on this library should prioritize migration to actively maintained alternatives that support current security standards.
- High · Outdated Gradle Build Tools —
build.gradle (root level). The project uses Gradle 2.3.1 and Android build tools 25.0.2, both of which are significantly outdated (released in 2017). These versions contain known security vulnerabilities and lack modern security features. The compileSdkVersion is also set to 25, which is far below the current Android API levels and misses critical security patches. Fix: Update to the latest Gradle version (8.x or higher) and Android build tools (34.x or higher). Update compileSdkVersion to at least 34. Review and update all dependencies to their latest secure versions. - High · Archived/Unmaintained Project —
README.md. The README explicitly states 'RoundedImageView is no longer actively maintained'. This means no security patches, bug fixes, or updates will be provided. Any vulnerabilities discovered in the library or its dependencies will not be addressed. Fix: Consider migrating to actively maintained alternatives for rounded image functionality. If this must be used, conduct regular security audits and implement compensating controls in dependent applications. - Medium · Missing Dependency Version Constraints —
build.gradle (root and module levels). The build.gradle file uses a deprecated repository configuration (jcenter() is sunset by JFrog) and lacks explicit version pinning for build tools, which could lead to unexpected upgrades with potential breaking changes or security issues. Fix: Replace jcenter() with mavenCentral() exclusively. Pin all dependency versions explicitly rather than using dynamic version ranges. Implement a dependency management strategy with version catalogs or a centralized dependency management tool. - Medium · No Proguard/R8 Security Configuration in Main Library —
roundedimageview/release-proguard.cfg. While the example app includes proguard-project.txt, the main library module has release-proguard.cfg which may not provide adequate obfuscation and security measures. This could expose sensitive logic or API keys if present in the code. Fix: Review and enhance Proguard/R8 configuration rules. Ensure proper obfuscation of sensitive methods and classes. Test the obfuscated build thoroughly to prevent functionality issues.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.