视图组中的图像按钮

Posted

技术标签:

【中文标题】视图组中的图像按钮【英文标题】:ImageButtons in a ViewGroup 【发布时间】:2010-01-14 16:30:55 【问题描述】:

我的应用程序的底层视图在画布上绘制了位图、线条等。我想在此之上显示将响应触摸事件的图像(图标)。此类图像的数量和位置将根据 SQLite 数据库中的数据而变化。

我认为实现这一点的方法是有一个 ViewGroup 是否正确对象?

每个按钮的代码如下: `

public class MyButton 

ImageButton mButton;
private Bitmap Star;

public MyButton(int intX, int intY) 
    mButton = new ImageButton(Global.thisApp);     
    mButton.setImageBitmap(BitmapFactory.decodeResource(Global.thisApp.getResources(), R.drawable.star)r);
    mButton.setPadding(0, 0, 0, 0);
    mButton.setOnTouchListener(new ImageButton.OnTouchListener() 
        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) 
            // ToDo
            return false;
        
    );
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams 
        (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.setMargins(intX, intY, 0, 0);
    Global.thisApp.mLayout.addView(mButton, params); 

` 创建按钮的代码如下:

      poiCount = 0;
    mCursor=Global.mDBAdapter.fetchItems(...);
    if (mCursor.getCount()>=0) 
        poi = new MyButton[mCursor.getCount()];
        mCursor.moveToFirst();
        do 
            int X = ... ;
            int Y = ... ;
            poi[poiCount] = new MyButton("Type", X, Y);
            poiCount++;
         while (mCursor.moveToNext());
    

此代码是从底层视图的 onDraw() 方法调用的。

这似乎在最初绘制屏幕时起作用,并且当随后重绘屏幕(使用新数据)添加新按钮时;但是,之前的按钮不会被删除。

我尝试调用 Global.ThisApp.MyLayout.removeView 并依次将每个按钮作为参数,但 Eclipse 对象的 MyButton 对象不能作为 removeView 的参数。

如何在每次底层视图失效时删除现有按钮?

【问题讨论】:

没有任何直接的答案,我决定采取不同的课程。我现在没有将 ImageButton 对象添加到 ViewGroup,而是更改了应用程序,以便在主视图的画布上简单地绘制图标位图,并且我在视图的 OnTouch 方法中插入了简单的代码,以确定触摸距离有多近任何图标。这似乎工作得很好,而且比添加 ImageButtons 快得多。 【参考方案1】:

MyButton 应该扩展 View(在您的情况下为 ImageButton)以添加到 ViewGroup 或从 ViewGroup 中删除。

【讨论】:

谢谢。我明天试试。我应该删除 mButton 字段和构造函数的第一行: (mButton=new ImageButton(Global.thisApp)) 吗? 是的,你不需要那行。您的构造函数还应该接收其他参数(至少是上下文)。 我修改了 MyButton 类,使其扩展 ImageButton 而不是将 ImageButton 作为成员。这可行,但我似乎仍然有同样的问题: - 按钮出现缓慢(在模拟器上,无论如何) - 它们不响应触摸(我尝试在 OnTouch 方法中放置一个 Toast) - 当 ViewGroup (a RelativeLayout) 无效时,它们不会被删除。幸运的是,我的替代代码(忽略 ImageButtons 并直接在画布上绘图)似乎有效,所以我想我会坚持下去。 (它可以很容易地检测触摸是否靠近多个图标。)

以上是关于视图组中的图像按钮的主要内容,如果未能解决你的问题,请参考以下文章

在约束布局中的按钮上重叠图像视图

如何在 xamarin 表单的集合视图中的最后一项旁边添加图像/按钮?

集合视图按钮背景图像在滚动时重复

如何将按钮放置在图像视图中的特定坐标处

用表格视图单元格 SWIFT 中的图像制作列表的正确方法

表格视图中的按钮没有响应其单元格编号