soulqw / curtain Goto Github PK
View Code? Open in Web Editor NEW一个Android 高亮View蒙层库
一个Android 高亮View蒙层库
┬───
│ GC Root: Java local variable
│
├─ android.os.HandlerThread thread
│ Leaking: UNKNOWN
│ Thread name: 'Chrome_ProcessLauncherThread'
│ ↓ HandlerThread.
│ ~~~~~~~~~~~~
├─ android.os.Message instance
│ Leaking: UNKNOWN
│ ↓ Message.obj
│ ~~~
╰→ com.qw.curtain.lib.GuideDialogFragment instance
Leaking: YES (ObjectWatcher was watching this because com.qw.curtain.lib.GuideDialogFragment received Fragment#onDestroy() callback and Fragment#mFragmentManager is null)
key = 808150e5-b0d9-48e2-8dd7-a5ab7ebc580e
watchDurationMillis = 9469
retainedDurationMillis = 4465
METADATA
Build.VERSION.SDK_INT: 28
Build.MANUFACTURER: Xiaomi
LeakCanary version: 2.2
App process name: com.acadsoc.aiclass
Analysis duration: 14704 ms
华为HONOR 30, 鸿蒙2.0.0
设置成高亮的View就不能设置点击事件了吗?
就是我现在是点击输入框开启蒙层,点击输入框外的一个按钮关闭蒙层,或者搜索出结果后关闭蒙层,我应该怎么实现呢?
push是通过拿到nextNode然后判断是否为空进行下一个或者结束的,但是valueAt(int)方法会提前判断大小并throw越界异常
以下是CurtainFlow中push方法代码
public void push() {
int currentIndex = allCurtains.indexOfKey(currentCurtainId);
int nextIndex = currentIndex + 1;
Curtain nextNode = allCurtains.valueAt(nextIndex);
if (null != nextNode) {
doWhenCurtainUpdated(nextNode, nextIndex);
} else {
finish();
}
}
以下是SparseArray中valueAt(int index)方法
public E valueAt(int index) {
if (index >= mSize && UtilConfig.sThrowExceptionForUpperArrayOutOfBounds) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
// Check if exception should be thrown outside of the critical path.
throw new ArrayIndexOutOfBoundsException(index);
}
if (mGarbage) {
gc();
}
return (E) mValues[index];
}
我这边看的资源是android-29的,在另一部7.0对应24的手机上不会出问题,估计是android源码改过 #
希望可以支持v4的FragmentActivity,适用性更大一些
activitry中嵌套了fragment 如何获取到fragment中的view
您好,咱们库支持高亮区域点击事件传递下去吗,比如我高亮区域是个按钮。点击空白区域的按钮
1 蒙层关闭 2 随后触发按钮后续的业务点击事件。我现在在 demo 里面修改空白区域的点击事件代码如下:
RecyclerViewActivity.java
@OverRide
public void onBindViewHolder(@nonnull RecyclerView.ViewHolder holder, int position) {
((TextView) (holder.itemView.findViewById(R.id.tv_text))).setText(data[position]);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@OverRide
public void onClick(View v) {
Toast.makeText(RecyclerViewActivity.this, "toast", Toast.LENGTH_SHORT).show();
}
});
}
目前是不支持。能否提供这种支持,或者指点一下应该怎么弄我自己来尝试修改然后 pull request 增加这种支持。
传递actiivty进去,一些界面来回跳转后用AS去监测有内存泄漏的问题
不知大佬可否补充一下,不胜感激
不支持点击蒙板关闭吗?
来自firebase的crash上报:
Fatal Exception: java.lang.IllegalStateException: DialogFragment GuideDialogFragment{32950c} (fc103030-14dd-43f3-8128-980944c99aa7) GuideDialogFragment} does not have a Dialog.
at androidx.fragment.app.DialogFragment.requireDialog(DialogFragment.java:302)
at androidx.fragment.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:425)
at androidx.fragment.app.Fragment.performGetLayoutInflater(Fragment.java:1484)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
at com.soulfa.voicechat.main.MainActivity.onStart(MainActivity.kt:149)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1433)
at android.app.Activity.performStart(Activity.java:7978)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3512)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2175)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7857)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
往抽空更新下,帮忙解决该问题
想问下 我添加高亮界面之后 想获取到高亮控件的位置 然后修改引导提示的位置 这个能获取到吗
建议支持设置四个边的padding,
某些手机机型上面会出现黑屏现象
首先,当前问题我已找到方法解决,只是讨论下是不是还存在最优解
有个需求:
需要首页高亮几个View(只能点击高亮区域,其他区域点击无效),然后点击View之后会进行页面跳转,但是之后返回首页,高亮并没有显示
目前需要去手动取消高亮,得拿到那个Iguide对象,但是唯一可以的方法只能在setCallBack回调里获取到
.setCallBack(object : Curtain.CallBack {
override fun onShow(curtain: IGuide?) {
+ guideDialog = curtain //自己外层加个变量,展示的时候获取
}
override fun onDismiss(iGuide: IGuide?) {
}
}).show()
我的期望:
可以调用show方法能够返回Iguide对象
Curtain(this@RecoveryFragment)
.show()
我觉得这里show方法应该把那个fragment对象给返回,之后可以手动调用此对象的dismissGuide()
来手动取消高亮
或者另一个思路
就是不需要开发者手动去取消高亮,能否在高亮View的那个区域进行事件拦截,如果点击了,则将当前高亮引导取消,并点击对应的View(直接调用
View.performClick()
应该可以?)
您好,在开发中我发现curtain.with(原界面中高亮的按钮),此时按钮原有的点击事件不响应了。请问如何能让高亮的view响应他原来的点击?
如果拦截返回键,我监听了Activity的onBackPressed方法,但是有 CurtainFlow 的时候,该方法并没有触发
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.