aChartEngine,GraphicalView OnClickListener不工作 [英] aChartEngine, GraphicalView OnClickListener not working
问题描述
我是新来的Android和现在用aChartEngine创建条形图。我想,当用户点击在图表上捕捉到x和y值。我已经看过了,从aChartEngine演示,并有我的图表打造精品。然而,onClickListner不,当我点击造影工作。我已经定义在OnResume方法听者,但它不工作。任何想法将大大AP preciated。我失去了一些东西呢?
下面是我这是从XYChartBuilder OnResume方法
@覆盖
保护无效onResume(){
super.onResume();
Toast.makeText(Clickable2.this,以OnResume,Toast.LENGTH_SHORT).show();
如果(mChartView == NULL){
Toast.makeText(Clickable2.this,mChartView为空,Toast.LENGTH_SHORT).show();
的LinearLayout布局=(的LinearLayout)findViewById(R.id.chart);
mChartView = ChartFactory.getBarChartView(这一点,mDatasetMethod(标题,X值),渲染器,Type.DEFAULT);
renderer.setClickEnabled(真正的);
renderer.setSelectableBuffer(100);
// OnClickListener
mChartView.setOnClickListener(新View.OnClickListener(){
// @覆盖
公共无效的onClick(视图v){
Toast.makeText(Clickable2.this,点击,Toast.LENGTH_SHORT).show();
SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
双[] XY = mChartView.toRealPoint(0);
如果(seriesSelection == NULL){
Toast.makeText(Clickable2.this,没有图表元素被点击了,Toast.LENGTH_SHORT)
。显示();
} 其他 {
Toast.makeText(
Clickable2.this,
在系列指数图表元素+ seriesSelection.getSeriesIndex()
+数据点指数+ seriesSelection.getPointIndex()+被点击
+最近点值X =+ seriesSelection.getXValue()+,Y =+ seriesSelection.getValue()
+单击的点值X =+(浮点)XY [0] +,Y =+(浮点)XY [1],Toast.LENGTH_SHORT).show();
}
}
});
// LongClickListener
mChartView.setOnLongClickListener(新View.OnLongClickListener(){
// @覆盖
公共布尔onLongClick(视图v){
SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
Toast.makeText(Clickable2.this,长按,Toast.LENGTH_SHORT).show();
如果(seriesSelection == NULL){
Toast.makeText(Clickable2.this,没有图表元素是pssed长$ P $,
Toast.LENGTH_SHORT);
返回false; //没有图表元素是pssed长$ P $,所以让一些
//否则处理该事件
} 其他 {
Toast.makeText(Clickable2.this,在系列指数图表元素
+ seriesSelection.getSeriesIndex()+数据点指数
+ seriesSelection.getPointIndex()+号长pressed,Toast.LENGTH_SHORT);
返回true; //元素是很久pressed - 事件已
//处理
}
}
});
mChartView.addZoomListener(新ZoomListener(){
公共无效zoomApplied(ZoomEvent E){
字符串类型=出;
如果(e.isZoomIn()){
TYPE =中;
}
的System.out.println(缩放+类型+速度+ e.getZoomRate());
}
公共无效zoomReset(){
的System.out.println(复位);
}
},真正的,真实的);
mChartView.addPanListener(新PanListener(){
公共无效panApplied(){
的System.out.println(新的X系列=+ renderer.getXAxisMin()+,+ renderer.getXAxisMax()
+],Y范围= [+ renderer.getYAxisMax()+,+ renderer.getYAxisMax()+]);
}
});
layout.addView(mChartView,新的LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
布尔启用= mDataset.getSeriesCount()> 0;
} 其他 {
mChartView.repaint();
Toast.makeText(Clickable2.this,mChartView不为空,Toast.LENGTH_SHORT).show();
}
}
您可以检查你的code像XYMultipleSeriesRenderer对象的一些定义? 也许你忘了设置<一个href="http://www.achartengine.org/content/javadoc/org/achartengine/renderer/DefaultRenderer.html#setClickEnabled%28boolean%29">setClickEnabled方法真的吗?!
或者,也许你应该尝试:
setOnTouchListener
使用方法:
公共布尔onTouch(视图V,MotionEvent事件)
这对我的作品。
I'm new to android and am using aChartEngine to create a bar chart. I want to capture the x and y values when a user clicks on the chart. I have looked at the demos from aChartEngine and have my chart creating fine. However the onClickListner does not work when I click on the graphy. I have defined the listener in the OnResume method but it doesn't work. Any ideas would be greatly appreciated. Am I missing something here?
Here is my OnResume method which is taken from XYChartBuilder
@Override
protected void onResume() {
super.onResume();
Toast.makeText(Clickable2.this, "In OnResume", Toast.LENGTH_SHORT).show();
if (mChartView == null) {
Toast.makeText(Clickable2.this, "mChartView is null", Toast.LENGTH_SHORT).show();
LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
mChartView = ChartFactory.getBarChartView(this,mDatasetMethod(titles,x,values),renderer,Type.DEFAULT);
renderer.setClickEnabled(true);
renderer.setSelectableBuffer(100);
//OnClickListener
mChartView.setOnClickListener(new View.OnClickListener() {
// @Override
public void onClick(View v) {
Toast.makeText(Clickable2.this, "ON CLICK", Toast.LENGTH_SHORT).show();
SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
double[] xy = mChartView.toRealPoint(0);
if (seriesSelection == null) {
Toast.makeText(Clickable2.this, "No chart element was clicked", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(
Clickable2.this,
"Chart element in series index " + seriesSelection.getSeriesIndex()
+ " data point index " + seriesSelection.getPointIndex() + " was clicked"
+ " closest point value X=" + seriesSelection.getXValue() + ", Y=" + seriesSelection.getValue()
+ " clicked point value X=" + (float) xy[0] + ", Y=" + (float) xy[1], Toast.LENGTH_SHORT).show();
}
}
});
//LongClickListener
mChartView.setOnLongClickListener(new View.OnLongClickListener() {
// @Override
public boolean onLongClick(View v) {
SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
Toast.makeText(Clickable2.this, "ON LONG CLICK", Toast.LENGTH_SHORT).show();
if (seriesSelection == null) {
Toast.makeText(Clickable2.this, "No chart element was long pressed",
Toast.LENGTH_SHORT);
return false; // no chart element was long pressed, so let something
// else handle the event
} else {
Toast.makeText(Clickable2.this, "Chart element in series index "
+ seriesSelection.getSeriesIndex() + " data point index "
+ seriesSelection.getPointIndex() + " was long pressed", Toast.LENGTH_SHORT);
return true; // the element was long pressed - the event has been
// handled
}
}
});
mChartView.addZoomListener(new ZoomListener() {
public void zoomApplied(ZoomEvent e) {
String type = "out";
if (e.isZoomIn()) {
type = "in";
}
System.out.println("Zoom " + type + " rate " + e.getZoomRate());
}
public void zoomReset() {
System.out.println("Reset");
}
}, true, true);
mChartView.addPanListener(new PanListener() {
public void panApplied() {
System.out.println("New X range=[" + renderer.getXAxisMin() + ", " + renderer.getXAxisMax()
+ "], Y range=[" + renderer.getYAxisMax() + ", " + renderer.getYAxisMax() + "]");
}
});
layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
boolean enabled = mDataset.getSeriesCount() > 0;
} else {
mChartView.repaint();
Toast.makeText(Clickable2.this, "mChartView is NOT null", Toast.LENGTH_SHORT).show();
}
}
Can you check your code for some definition of an object like XYMultipleSeriesRenderer? Maybe you forgot to set the setClickEnabled method to true?!
Or maybe you should try:
setOnTouchListener
with the method:
public boolean onTouch(View v, MotionEvent event)
It works for me.
这篇关于aChartEngine,GraphicalView OnClickListener不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!