Tag: android view

在自定义视图中绘制自定义视图

我正在处理自定义视图TreeView ,它将显示给定根节点的树。 我正在使用Kotlin语言。 以下是目前的部分内容: override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) drawNodeAndChildren(canvas, rootNode) } /** * Draws a representation of a node and its children onto the canvas. * … */ private fun drawNodeAndChildren(canvas: Canvas, node: TreeNode, …): Int { … // Calculate coordinates of rect val top = … val bottom = … val left […]

Android SeekBar最小值

有谁知道如何定义一个SeekBar的最小值? 这是在XML布局完成还是我需要以编程方式定义它? 基本上我需要将我的最小值从0改为0.2

Android中的文字闪烁着最简洁的Kotlin

我需要使一些文本(目前在TextView )闪烁几秒钟。 关于如何在java中这样做有几个答案,但是因为Kotlin有一些java不支持的语法/语言特性,所以我在问什么是使用Kotlin在Android上使文本闪烁的最简洁的方法。 虽然我的目标是做一个平淡无奇的眨眼,但是我也接受这样的做法。 请注意,我也在考虑轻量级代码性能。 感谢您的回答!

点击触摸事件填充整个屏幕

我有这个自定义视图,可以拖动和缩放(DragAndZoomView)。 我用它与另一个自定义视图(CustomGridView),只是画一些矩形。 我的问题是,当我拖动或缩放我的CustomGridView我可以在屏幕上的任何地方,而不是只有当我触摸视图。 这使得它真的很烦人,当我尝试从后面的代码在我的父视图中添加多个这些。 下面是DragAndZoomView的代码: abstract class DragAndZoomView : View { var useCustomOnTouchEvent = false // States. private val NONE: Byte = 0 private val DRAG: Byte = 1 private val ZOOM: Byte = 2 private var mode = NONE // Matrices used to move and zoom image. private val mMatrix = Matrix() private val […]

在RecycleView适配器中实现多个ViewHolder类型

这可能是一个讨论不是一个问题。 正常的方式来实现多种类型 如你所知,如果我们想要在RecyclerView实现多种类型,我们应该提供多个CustomViewHolder扩展RecyclerView.ViewHolder 。 例如, class TextViewHolder extends RecyclerView.ViewHolder{ TextView textView; } class ImageViewHolder extends RecyclerView.ViewHolder{ ImageView imageView; } 然后我们必须重写getItemViewType 。并在onCreateViewHolder中构造TextViewHolder或ImageViewHolder 。 @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == 0) { return new ImageViewHolder(mLayoutInflater.inflate(R.layout.item_image, parent, false)); } else { return new TextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false)); } } 上面的代码是正常的,但有另一种方式。 其他方式 我认为只有一个CustomViewHolder就足够了。 class MultipleViewHolder […]

为什么Android View类为少数属性提供“outValues风格”获取器?

您可以使用标准getter(如getHeight() , getAlpha() , getId() …)获取一些视图属性,如height , alpha , id , matrix , drawingTime或elevation 。 但是,你有一些视图的属性(大部分是Point或Rect返回类型),比如locationInWindow , globalVisibleRect , locationInScreen , drawingRect , drawingCache隐藏在getters之下,强制你事先用空构造函数创建返回对象,对象作为getter参数,以便将数据“保存”给它们。 globalVisibleRect的getter globalVisibleRect : public final boolean getGlobalVisibleRect(Rect r) 迫使你做这样的事情(Kotlin): val rect = Rect() getGlobalVisibleRect(rect) doSomeStuffWithRect(rect) 这不是真的一致,也不是可以实时调试的Android Studio中的表达式选项卡,它真的很麻烦。 为什么这样做? 如果View不可见,我看到一些返回false布尔值的方法,因此,您知道返回的数据是无效的,但是如果方法已经知道它产生了不可用的信息,那么不应该使用返回空值来解决它。 另一方面, getLocationOnScreen返回void,没有额外的参数,所以我不能真正理解为什么你会这样复杂的东西。

如何以编程方式在RelativeLayout中布局视图?

我试图通过编程实现以下(而不是通过XML声明): <RelativeLayout…> <TextView … android:id="@+id/label1" /> <TextView … android:id="@+id/label2" android:layout_below: "@id/label1" /> </RelativeLayout> 换句话说,如何让第二个TextView出现在第一个TextView下面,但我想在代码中做到这一点: RelativeLayout layout = new RelativeLayout(this); TextView label1 = new TextView(this); TextView label2 = new TextView(this); … layout.addView(label1); layout.addView(label2); setContentView(layout); 更新: 谢谢,TreeUK。 我理解大方向,但仍然不起作用 – “B”重叠“A”。 我究竟做错了什么? RelativeLayout layout = new RelativeLayout(this); TextView tv1 = new TextView(this); tv1.setText("A"); TextView tv2 = new TextView(this); […]

Android Studio – 获取活动视图实例的最佳方式

我是Android Studio的新手,我想快速访问按钮,图像视图,文本视图等视图。 到目前为止,我知道方法findViewById ,这就是我正在做的事情来创建轻松访问视图: Button btn1, btn2, btn3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.btn1=(Button)findViewById(R.id.btn1); this.btn2=(Button)findViewById(R.id.btn2); this.btn3=(Button)findViewById(R.id.btn3); } //then I simply use my defined vars 尽管它有效,但是编写所有这些代码仍然很无聊(或者每次都必须使用findViewById ,而获得id并且仍然添加一个cast的方法很麻烦)。 这真的是这样做的最好方法吗?

onGlobalLayout区分各种调用

我有一个标识视图,这是一个包含单个ImageView的全屏幕片段。 徽标图像完全可见之后,我必须执行一些操作。 以下代码用于调用特殊任务 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ImageView logoImageMaster = new ImageView(getContext()); //logoImageMaster.setImageResource(resID); //even after removing this, i am getting the callback twice try { // get input stream InputStream ims = getActivity().getAssets().open("product_logo.png"); // load image as Drawable Drawable d = Drawable.createFromStream(ims, null); // set image to ImageView logoImageMaster.setImageDrawable(d); […]

如何处理与Kotlin和指挥的意图

我有三个意见和一个活动。 MainActivity – MainController – PushedController – NotificationOpenController。 MainController包含一个按钮,当按下时做一些黑匣子的东西,设备收到通知托盘中的通知。 当通知被点击时,我想要的行为就像 router.pushController(RouterTransaction.with(NotificationOpenController(bundle)) .pushChangeHandler(VerticalChangeHandler()) .popChangeHandler(VerticalChangeHandler())) 刚发生。 任何与Kotlin相关的提示或修订,我赞赏,因为我这样做是为了学习语言 我不确定如何通过Intents(也许是广播)以正确的方式来实现这个目标? 但经过一些试验和错误,我的代码现在看起来像这样: override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) App.graph.inject(this) setContentView(R.layout.activity_main_kotlin) Log.d(TAG,"${FirebaseInstanceId.getInstance().getToken()}") router = Conductor.attachRouter(this, controller_container, savedInstanceState) val startingIntent : Intent? = intent if(startingIntent?.extras != null){ transitionToNotificationOpenController(startingIntent?.extras) } else{ if (!router.hasRootController()) { router.setRoot(RouterTransaction.with(MainController())); } } } override fun onBackPressed() { if […]