gpt4 book ai didi

android - MPAndroidChart - 在 MarkerView 中单击按钮

转载 作者:行者123 更新时间:2023-11-29 19:45:00 24 4
gpt4 key购买 nike

目前我在布局中有一个 Button,但是分配的 OnClickListener 永远不会回调到 onClick 方法。

是否可以在分配给 MarkerView 的布局中拦截 Button 的点击?

最佳答案

我已经完成了带有可点击标记 View 的应用程序。我的解决方案是我们将创建 LineChart(或其他图表)的子类,然后覆盖 onTouchEvent 并检测触摸位置。

public class MyChart extends LineChart {

@Override
public boolean onTouchEvent(MotionEvent event) {
boolean handled = true;
// if there is no marker view or drawing marker is disabled
if (isShowingMarker() && this.getMarker() instanceof ChartInfoMarkerView){
ChartInfoMarkerView markerView = (ChartInfoMarkerView) this.getMarker();
Rect rect = new Rect((int)markerView.drawingPosX,(int)markerView.drawingPosY,(int)markerView.drawingPosX + markerView.getWidth(), (int)markerView.drawingPosY + markerView.getHeight());
if (rect.contains((int) event.getX(),(int) event.getY())) {
// touch on marker -> dispatch touch event in to marker
markerView.dispatchTouchEvent(event);
}else{
handled = super.onTouchEvent(event);
}
}else{
handled = super.onTouchEvent(event);
}
return handled;
}

private boolean isShowingMarker(){
return mMarker != null && isDrawMarkersEnabled() && valuesToHighlight();
}
}

public class ChartInfoMarkerView extends MarkerView {
@BindView(R.id.markerContainerView)
LinearLayout markerContainerView;

protected float drawingPosX;
protected float drawingPosY;
private static final int MAX_CLICK_DURATION = 500;
private long startClickTime;

/**
* The constructor
*
* @param context
* @param layoutResource
*/
public ChartInfoMarkerView(Context context, int layoutResource) {
super(context, layoutResource);
ButterKnife.bind(this);
markerContainerView.setClickable(true);
markerContainerView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("MARKER","click");
}
});
}

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
startClickTime = Calendar.getInstance().getTimeInMillis();
break;
}
case MotionEvent.ACTION_UP: {
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if(clickDuration < MAX_CLICK_DURATION) {
markerContainerView.performClick();
}
}
}
return super.onTouchEvent(event);
}

@Override
public void draw(Canvas canvas, float posX, float posY) {
super.draw(canvas, posX, posY);
MPPointF offset = getOffsetForDrawingAtPoint(posX, posY);
this.drawingPosX = posX + offset.x;
this.drawingPosY = posY + offset.y;
}
}

关于android - MPAndroidChart - 在 MarkerView 中单击按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37959156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com