簡體   English   中英

Android XYPlot 圖形底部標簽大小更改?

[英]Android XYPlot graph bottom label size change?

在構建 gradle 中使用 androidplot 庫的 Android 圖形視圖加載小部件

implementation "com.androidplot:androidplot-core:1.5.7"

使用以下基於網絡調用的 getresponse 代碼動態創建圖表。

在類文件中我的示例代碼...

val plot = XYPlot(context, "")
    val h = context.resources.getDimension(R.dimen.sample_widget_height).toInt()
    val w = context.resources.getDimension(R.dimen.sample_widget_width).toInt()

   plot.graph.setMargins(100f, 0f, 0f, 16f)
   plot.graph.setPadding(0f, 0f, 0f, 0f)
   plot.graph.gridInsets.left = 100f
   plot.graph.gridInsets.top = 0f
   plot.graph.gridInsets.right = 0f
   plot.graph.gridInsets.bottom = 40f                                        
   plot.legend.textPaint.textSize = 1f

   plot.linesPerRangeLabel = 8
   plot.linesPerDomainLabel = 8

   plot.graph.setSize(Size.FILL)

   plot.measure(w, h);
   plot.layout(0, 0, w, h);

   plot.graph.position(0f, HorizontalPositioning.ABSOLUTE_FROM_LEFT, 0f,
                      VerticalPositioning.ABSOLUTE_FROM_TOP, Anchor.LEFT_TOP)

   val series1Numbers = mutableListOf<Int>()
   val series2Numbers = mutableListOf<Int>()
   val xLabels = mutableListOf<String>()

   for (i in 0 until model.Details.Items.size) {
       var item = model.Details.Items[i]
       series1Numbers.add(item.TotalScore)
       series2Numbers.add(0)
       xLabels.add(item.Date)
   }

  val series1 = SimpleXYSeries(series1Numbers, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, 
                               "Series1")
   val series2 = SimpleXYSeries(series2Numbers, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, 
                               "Series1")
 
 val series1Format = LineAndPointFormatter(context, R.xml.line_point_formatter_with_labels)
                                    val series2Format = LineAndPointFormatter(context, 
                                    R.xml.line_point_formatter_with_labels_2)

 plot.graph.setLineLabelEdges(XYGraphWidget.Edge.LEFT, XYGraphWidget.Edge.BOTTOM)

 plot.setRangeBoundaries(-110, 110, BoundaryMode.FIXED)

 plot.graph.getLineLabelStyle(XYGraphWidget.Edge.LEFT).format = object : Format() {
                                        override fun format(obj: Any, toAppendTo: 
                                 StringBuffer, pos: FieldPosition): StringBuffer {
                                 
                 val i = Math.round((obj as Number).toFloat())
                 L.m("widget y axos label value ", i.toString())
                                            
plot.graph.setLineLabelRenderer(XYGraphWidget.Edge.LEFT, MyLineLabelRenderer())
               return if (i > 50) {
                        return toAppendTo.append(context.getString(R.string.str_excellent))
               } else if (i > 25 && i <= 50) {
                      return toAppendTo.append(context.getString(R.string.str_very_good))
               } else if (i > 0 && i <= 25) {
                        return toAppendTo.append(context.getString(R.string.str_good))
               } else if (i == 0) {
                         return toAppendTo.append(context.getString(R.string.str_neutral))
               } else if (i < 0 && i >= -25) {
                    return toAppendTo.append(context.getString(R.string.str_not_good))
               } else if (i < -25 && i >= -50) {
                    return toAppendTo.append(context.getString(R.string.str_be_aware))
              } else if (i < -50) {
                    return toAppendTo.append(context.getString(R.string.str_time_out))
              } else {
                    return toAppendTo.append(context.getString(R.string.str_neutral))
              }

        }
            override fun parseObject(source: String, pos: ParsePosition): Any {
                                            // unused
                                          return ""
                              }
     }


     plot.legend.setVisible(false)
     plot.getGraph().linesPerDomainLabel = 5
     plot.getGraph().linesPerRangeLabel = 5

                                   
    plot.graph.getLineLabelStyle(XYGraphWidget.Edge.BOTTOM).format = object : Format() {
                                        override fun format(obj: Any, @NonNull toAppendTo: 
   StringBuffer, @NonNull pos: FieldPosition): StringBuffer {                                                
              
       val i = Math.round((obj as Number).toFloat())
       val displayFormat = SimpleDateFormat(prefs.selectedTimeFormat, Locale.US)                           
       val originalFormat = SimpleDateFormat(Constants.DATE_yyyyMMddHHmmss, Locale.US)                                                
       var displayTime = ""
            
      if (prefs.selectedTimeFormat.equals(Constants.TWENTYFOUR_HOUR_FORMAT))

      displayTime = displayFormat.format(originalFormat.parse(xLabels.get(i)))                 
      else {
             displayTime = displayFormat.format(originalFormat.parse(xLabels.get(i)))
             displayTime.replace("AM", " am")
             displayTime.replace("PM", " pm")
           }
                                           
  plot.graph.setLineLabelRenderer(XYGraphWidget.Edge.BOTTOM, MyLineLabelRenderer())
                                           return toAppendTo.append(displayTime)
  }
  override fun parseObject(source: String, @NonNull pos: ParsePosition): Any {
                                            return ""
                                        }
  }

  plot.addSeries(series1, series1Format)
  plot.addSeries(series2, series2Format)

 val bitmap: Bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
 plot.draw(Canvas(bitmap))
 remoteViews!!.setImageViewBitmap(R.id.img_graph_view, bitmap)
appWidgetManager!!.updateAppWidget(appWidgetId, remoteViews)

我試圖減少底部標簽顯示的文字大小不起作用,它彼此重疊如何減少底部標簽文字大小?

setTextsize 在下面的代碼中使用

 plot.getGraph().getLineLabelStyle(XYGraphWidget.Edge.LEFT).getPaint().textSize = 16f
                            
   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM