我到处找遍了,还是找不到好的答案。我已经创建了自己的类来扩展imageView,并且在onDraw()方法中,我使用画布在图像上画圆圈。
不过,我现在想做的是在不同的地方在图像上画一个按钮,并为它设置一个onClick事件,所以当用户按下该按钮时,它将打开一个新的活动。
下面是我所拥有的,所以far..It在正确的位置绘制按钮,除非我的onClick方法没有触发
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
//1.arrayList Points. 2.arrayLists for points in X, 3.arrayList for points in Y
for(int i=0; i<arrayListPoints.size(); i++){
Button b = new Button(mContext);
LinearLayout ll = new LinearLayout(mContext);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(alPoints_x.get(i), alPoints_y.get(i), 0, 0);
ll.addView(b, layoutParams);
//Measure and layout the linear layout before drawing it
ll.measure(MeasureSpec.getSize(ll.getMeasuredWidth()), MeasureSpec.getSize(ll.getMeasuredHeight()));
ll.layout(0, 0, MeasureSpec.getSize(b.getMeasuredWidth()), MeasureSpec.getSize(b.getMeasuredHeight()));
//Finally draw the linear layout on the canvas
ll.draw(canvas);
//create an onClick event for the button
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast msg = Toast.makeText(mContext, "button clicked \n", Toast.LENGTH_LONG);
msg.show();
} //end of public void
});
}
invalidate();
} //end of onDraw()发布于 2011-07-27 14:06:09
我不得不说,这种方法可能有目的,但我看不出来。为什么每次重新绘制图像视图时都要重新创建和绘制布局?
onClick侦听器不能工作的原因是,您的布局从未被注入到活动内容中,您只是在绘制它(我不认为它会为创造性而工作),也因为布局和按钮没有附加到任何我很确定它们会被垃圾收集的东西上,这当然是不相关的。
而且,每次绘制画布时都会发生这种情况,这对性能或内存都不好。
是否有什么原因,您不只是创建一个布局与您的图像视图和按钮,然后移动按钮,当你需要。
如果你坚持这种方法,我能想到的唯一的“解决方案”就是在你的图像视图中跟踪按钮的直角,然后检查一个运动事件是否在按钮绘制的区域内“点击”。
如果您告诉我们为什么要这样做,我们可能会提供一个比这个实现更好的解决方案,这个实现看起来并不是必要或正确的,但您可能有一个我无法想到的正当理由。
更新
所以我认为根据你的评论你想做的是
在地图上放置一个AbsoluteLayout容器(填充父容器),或者将映射放置在这样的容器中,不管是哪种方式。
然后将按钮放入布局容器中(通过xml或编程方式,这并不重要)
然后设置这些按钮的布局x/y/visibilty
https://stackoverflow.com/questions/6845129
复制相似问题