前言:
现在我们已经做好了点击饼图后该区域旋转至正下方,接下来的目标是将饼图点击后再在下方出现一个TextView显示详情.这就需要考虑到饼图不能再占据屏幕正中,而是要靠于上方,腾出一些空间,在下方显示详情文本,以防出现适配问题.
将饼图移到界面上方
这里可以采取两个方案来将实现该目的:
- 直接修改PieChart类或其父类的onMeasure方法(此方法只适用于从GitHub下载的源码添加到工程的方式)
- 创建一个类继承自PieChart类,重写onMeasure方法(通用)
这里作为一名强迫症患者,并且因为采用的是Gradle依赖添加方式,就自己创建了一个继承自PieChart的类,这里需要改动两个地方,一个在xml界面文件中,需要将com.github.mikephil.charting.charts.PieChart
换成自己包里的PieChart,另一个是PieFragment.kt中:
源码:
/*MPieChart.kt*/
import android.content.Context
import android.util.AttributeSet
import android.view.View
import com.github.mikephil.charting.charts.PieChart
import com.github.mikephil.charting.utils.Utils
/**
* Created by Administrator on 2018/2/12.
*/
class MPieChart : PieChart {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
val size = Utils.convertDpToPixel(MeasureSpec.getSize(widthMeasureSpec).toFloat()).toInt()//这里size定死50f不合理,改一下
setMeasuredDimension(
Math.max(suggestedMinimumWidth,
View.resolveSize(size,
widthMeasureSpec)),
Math.max(suggestedMinimumHeight,
View.resolveSize(size,
widthMeasureSpec)))//这里将heightMeasureSpec改成widthMeasureSpec
}
}
这里涉及到了Kotlin的构造方法知识,该类没有主构造方法,使用了constructor关键字声明了三个从构造方法,修改过后的效果图如下:
在下方添加TextView
依赖:
/*百分比布局*/
compile"com.android.support:percent:27.0.2"
这里的版本号根据'com.android.support:appcompat-v7:27.0.2'
版本号设置
源码:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height=