【发布时间】: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 快得多。