円グラフをクリック可能にしたいと思います。afreechart の Web サイトで公開されている例 (棒グラフと円グラフを作成するため) に取り組んでいます。私はそれを理解しようとしていますが、円グラフをクリックできるようにすることで、もう少し進んでいきます。例はここにあります: https://code.google.com/p/afreechart/
クラスを見る
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(),
Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
inertialMove();
paintComponent(canvas);
}
public void paintComponent(Canvas canvas) {
// first determine the size of the chart rendering area...
Dimension size = getSize();
RectangleInsets insets = getInsets();
RectShape available = new RectShape(insets.getLeft(), insets.getTop(),
size.getWidth() - insets.getLeft() - insets.getRight(),
size.getHeight() - insets.getTop() - insets.getBottom());
double drawWidth = available.getWidth();
double drawHeight = available.getHeight();
this.scaleX = 1.0;
this.scaleY = 1.0;
if (drawWidth < this.minimumDrawWidth) {
this.scaleX = drawWidth / this.minimumDrawWidth;
drawWidth = this.minimumDrawWidth;
}
else if (drawWidth > this.maximumDrawWidth) {
this.scaleX = drawWidth / this.maximumDrawWidth;
drawWidth = this.maximumDrawWidth;
}
if (drawHeight < this.minimumDrawHeight) {
this.scaleY = drawHeight / this.minimumDrawHeight;
drawHeight = this.minimumDrawHeight;
}
else if (drawHeight > this.maximumDrawHeight) {
this.scaleY = drawHeight / this.maximumDrawHeight;
drawHeight = this.maximumDrawHeight;
}
RectShape chartArea = new RectShape(0.0, 0.0, drawWidth,
drawHeight);
this.chart.draw(canvas,chartArea, this.anchor, this.info);
}
アクティビティ
次に、領域 (たとえば、赤い領域) をクリックしてメッセージを表示したいと思います。問題は、afreechart Web サイトのサンプル コード全体からチャートが描画されている場所を知っているためです。異なる色のすべての領域に移動し、クリックして適切なメッセージを表示できますが、チャートはどこかに隠されています (IT は表示されません)。問題は、ビットマップとキャンバスの使用方法が原因である可能性があります...
public boolean onTouchEvent(MotionEvent event){
if(event.getAction()==MotionEvent.ACTION_DOWN){
}
else if (event.getAction()==MotionEvent.ACTION_UP){
int color = bitmap.getPixel((int) event.getX(), (int) event.getY());
System.out.println("color =" +color);
int redValue = Color.red(color);
int blueValue = Color.blue(color);
int greenValue = Color.green(color);
System.out.println("redValue =" +redValue);
System.out.println("blueValue =" +blueValue);
System.out.println("greenValue =" +greenValue);
if (redValue == 255){
Toast.makeText(getBaseContext(), "Is Red", Toast.LENGTH_SHORT).show();
}
if (blueValue == 255){
Toast.makeText(getBaseContext(), "Is BLUE", Toast.LENGTH_SHORT).show();
}
if (greenValue == 255){
Toast.makeText(getBaseContext(), "Is GREEN", Toast.LENGTH_SHORT).show();
}
//}
}
return true;
}
}
私はあなたの助けを得ることができてうれしいです...最初に私はアンドロイドに不慣れで、実際にチャートを見なくても正しいメッセージが表示されたのを見ることができたので、本当にイライラしています