Tag: 用户界面

GUI构建器中找到的对齐准则/捕捉算法

我尝试实现一个类似于许多GUI构建器的行为:当前拖动的组件应该与另一个组件对齐,如果它们几乎处于水平或垂直线上。 我目前的做法是遍历所有放置的组件,并检查是否有任何四边(几乎)与拖动组件边缘对齐: for (v in rootView.relativeLayout.children()) { // x val left = event.rawX – dXInit val right = event.rawX – dXInit + view.width val leftEdgeRange = (v.leftEdge() – 50 .. v.leftEdge() + 50) val rightEdgeRange = (v.rightEdge() – 50 .. v.rightEdge() + 50) when (left) { in leftEdgeRange -> x = v.leftEdge() in rightEdgeRange -> […]

在图像周围流动textview

我花了几个小时寻找答案,真的不知道如何解决它。 那么让我们来谈谈业务: 有一个图像和一个TextView ,我需要像这样在ImageView周围流动TextView : 第一个可能的解决方案是使用https://github.com/deano2390/FlowTextView,但它不扩展TextView所以这个库不适合我的原因很多。 第二种解决方案是使用LeadingMarginSpan.LeadingMarginSpan2跨度,但是它会影响文本中每个n行的每个段落(就像在这个答案 – > 如何排列文本以在图像周围流动一样 ),所以我得到这样的结果: 但是我只想为前n行设置保证金! 然后我决定实现LeadingMarginSpan.Standart并创建一个计数器,并在getLeadingMargin(first: Boolean): Int增加它getLeadingMargin(first: Boolean): Int函数的调用。 当计数器达到期望值时,函数返回0作为余量宽度。 又有一个失败! 而不是填充TextView线,文本只是左移,并没有传播到视图的末尾! UPD:是的,我在这里使用onGlobalLayoutListener 那么,谷歌搜索另一个解决方案,我发现这个答案https://stackoverflow.com/a/27064368/7218592好吧,我已经做了一切描述和实施的代码: //set left margin of desirable width val params: RelativeLayout.LayoutParams = RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) params.leftMargin = holder.imageContainerHeight!! params.addRule(RelativeLayout.BELOW, holder.mNumberAndTimeInfo!!.id) holder.mCommentTextView!!.layoutParams = params if (holder.commentTextViewOnGlobalLayoutListener != null) holder.mCommentTextView!!.viewTreeObserver.removeOnGlobalLayoutListener( holder.commentTextViewOnGlobalLayoutListener) //add onGlobalLayoutListener holder.mCommentTextView!!.viewTreeObserver.addOnGlobalLayoutListener( if (holder.commentTextViewOnGlobalLayoutListener != […]

Anko floatingActionButton缺失或冲突的依赖关系

下面这个稍微过时的教程 ,我卡住试图使用org.jetbrains.anko.design.floatingActionButton 。 错误是: 无法访问类“android.support.design.widget.FloatingActionButton”。 检查您的模块类路径是否存在缺失或冲突的依赖关系。 build.gradle(Project) buildscript { ext.kotlin_version = '1.1.50' ext.anko_version = '0.10.1' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0-beta6' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } build.gradle(App) apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { […]

管理片段以分割导航

最近,我开始研究一个应用程序,该应用程序有一个主要活动和多个从一个容器中交换的子片段。 我的问题很简单:建议通过调用getActivity().getSupportFragmentManager().beginTransaction().replaceFragment()… ,或每个片段定义一个接口,让每个片段切换到UI流中的下一个片段主要活动实现并让主要活动处理应用程序的导航? 优点活动管理碎片 片段不依赖于单个特定的活动,并且可以交换进出任意的布局,从而更易于维护。 UI导航代码集中在一个类中。 活动管理碎片 活动将不得不实现大量的接口,混淆代码。 必须有一个比实现15个接口更好的方法,它们都表明片段已经完成,并准备好进入UI的下一个阶段。 如果其他人阅读代码,UI导航并不那么直观。 考虑一个带有三个片段(称为A,B和C)的例子,并且假设片段A在某个动作上移动到B,并且在某个动作上B移动到C. 如果每个片段必须通过中间接口才能移动到下一个片段,那么这个流的方向是不明显的。 我提出的一个解决方案是拥有一个包含每个片段的回调函数的接口,而不需要大量的单独接口。 不过,我仍然觉得还有更好的办法。

在Android中从位图裁剪圆形区域

我有一个位图,我想从这个位图裁剪一个圆形的区域。 圆圈外的所有像素都应该是透明的。 我该怎么做?

制作一个扩展ConstraintLayout的自定义pannable和可缩放的ViewGroup

我试图合并一个自定义布局(即一个ViewGroup),它扩展了ConstraintLayout(这样我就可以添加具有位置约束的子视图),用户应该能够平移和放大。 我尝试了很多方法来达到这个目的。 包含: 尝试调整Google的示例以便在此平移/缩放视图。 根据触摸事件移动画布(如下是我的onTouchEvent类)。 override fun onTouchEvent(event: MotionEvent): Boolean { // These two are the coordinates of the user's finger whenever onTouchEvent is called val x: Float = event.x val y: Float = event.y when(event.action and ACTION_MASK) { ACTION_DOWN -> { // Might not be necessary; check out later dragging = true // We […]