# ShowcaseView **Repository Path**: xu-saisaiyi/ShowcaseView ## Basic Information - **Project Name**: ShowcaseView - **Description**: ShowcaseView库旨在通过独特且吸引人的叠加层向用户突出显示和展示应用的特定部分。这个库非常适合指出用户的兴趣点,突出模糊但是有用的内容 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-07-01 - **Last Updated**: 2021-11-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ShowcaseView ShowcaseView库旨在通过独特且吸引人的叠加层向用户突出显示和展示应用的特定部分。这个库非常适合指出用户的兴趣点,突出模糊但是有用的内容。 # ScreenShot # How to import into your project 方法一: 通过library生成har包,添加har包到libs文件夹内 在entry的gradle内添加如下代码 ```gradle implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) ``` 方法二: ```gradle allprojects{ repositories{ mavenCentral() } } implementation 'io.openharmony.tpc.thirdlib:ShowcaseView:1.0.2' ``` # Demo 要使用ShowcaseView,请使用Builder模式。 举个例子: ```Java @Override public void onStart(Intent intent) { super.onStart(intent); ComponentContainer componentContainer = (ComponentContainer) LayoutScatter.getInstance(this) .parse(ResourceTable.Layout_ability_main, null, false); setUIContent(componentContainer); ViewTarget target = new ViewTarget(ResourceTable.Id_buttonBlocked, this); new ShowcaseView.Builder(this, (ComponentContainer) componentContainer.getComponentParent()) .withMaterialShowcase() .setTarget(target) .setContentTitle(ResourceTable.String_showcase_main_title) .setContentText(ResourceTable.String_showcase_main_message) .setStyle(ResourceTable.Pattern_CustomShowcaseTheme2) .setShowcaseEventListener(this) .replaceEndButton(ResourceTable.Layout_view_custom_button) .build(); } ``` 也可以自定义ShowcaseView的外观 ```Java class CustomShowcaseView implements ShowcaseDrawer { private float width = 0; private float height = 0; private Paint eraserPaint = null; private Paint basicPaint = null; private int eraseColour = 0xffffff; private RectFloat renderRect = null; CustomShowcaseView(ResourceManager resources) { try { width = resources.getElement(ResourceTable.Float_custom_showcase_width).getFloat(); height = resources.getElement(ResourceTable.Float_custom_showcase_height).getFloat(); eraserPaint = new Paint(); eraserPaint.setColor(new Color(0xFFFFFF)); eraserPaint.setAlpha(0); eraserPaint.setBlendMode(BlendMode.CLEAR); eraserPaint.setAntiAlias(true); eraseColour = resources.getElement(ResourceTable.Color_custom_showcase_bg).getColor(); basicPaint = new Paint(); renderRect = new RectFloat(); } catch (Exception e) { e.printStackTrace(); } } @Override public void setShowcaseColour(int color) { eraserPaint.setColor(new Color(color)); } @Override public void drawShowcase(PixelMap buffer, float x, float y, float scaleMultiplier) { Texture texture = new Texture(buffer); Canvas bufferCanvas = new Canvas(texture); renderRect.left = x - width / 2f; renderRect.right = x + width / 2f; renderRect.top = y - height / 2f; renderRect.bottom = y + height / 2f; bufferCanvas.drawRect(renderRect, eraserPaint); } @Override public int getShowcaseWidth() { return (int) width; } @Override public int getShowcaseHeight() { return (int) height; } @Override public float getBlockedRadius() { return width; } @Override public void setBackgroundColour(int backgroundColor) { // No-op, remove this from the API? } @Override public void erase(PixelMap bitmapBuffer) { bitmapBuffer.writePixels(eraseColour); } @Override public void drawToCanvas(Canvas canvas, PixelMap bitmapBuffer) { PixelMapHolder pixelMapHolder = new PixelMapHolder(bitmapBuffer); canvas.drawPixelMapHolder(pixelMapHolder, 0, 0, basicPaint); } } ``` Copyright and Licensing ---- Copyright Alex Curran ([@amlcurran](https://twitter.com/amlcurran)) © 2012-2014. All rights reserved. This library is distributed under an Apache 2.0 License.