在 kotlin 中旋转 R.drawable
Rotate R.drawable in kotlin
我需要将风向读数显示为箭头,原始 bmp 是一个旋转为 0°(指向上方)的箭头,我有一个 for 循环,我可以在其中从数据库中检索度数,我可以设置可绘制对象到我的 mpandroidchart,但我需要旋转那个 drawable。
val jsonTemperatureData = JSONArray(result?.get(0))
for (i in 0 until jsonTemperatureData.length()) {
val item = jsonTemperatureData.getJSONObject(i)
val reading_temperature = item.getString("reading_windspeed")
val degrees= item.getString("degrees")
yVals.add(Entry(hour.toFloat(), reading_temperature.toFloat(), ContextCompat.getDrawable(getApplicationContext(),R.drawable.direc)))
}
如何在这个循环中设置从 val degrees= item.getString("degrees")
到 R.drawable.direc
的浮点值?
如果您使用的是 imageView,则有一个 属性:rotation
如果您有类似下面的代码:
<ImageView
android:id="@+id/imageView"
android:layout_width="60dp"
android:layout_height="60dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
下面的代码适合我:
imageView.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.direc))
imageView.rotation = imageView.rotation + degrees.toFloat()
与其旋转可绘制对象,我建议您旋转 ImageView
。
Matrix matrix = new Matrix();
imageView.setScaleType(ImageView.ScaleType.MATRIX); //required
val bounds: Any = imageView.getDrawable().getBounds()
matrix.postRotate( YOUR_ANGLE_GOES_HERE, bounds.width()/2, bounds.height()/2);
imageView.setImageMatrix(matrix);
或
mImageView.setRotation(YOUR_ANGLE_GOES_HERE)
与 API>=11
Source
我找到了解决方案,MPAndroidChart 只接受可绘制对象作为其图表的图标,我想旋转该可绘制对象(如果有 ImageViews 会很容易)。
所以解决方案是将可绘制对象转换为位图,旋转该位图,然后将其转换回可绘制对象并将其设置为图标:
val jsonTemperatureData = JSONArray(result?.get(0))
for (i in 0 until jsonTemperatureData.length()) {
val item = jsonTemperatureData.getJSONObject(i)
val reading_temperature = item.getString("reading_windspeed")
val reading_direction = item.getString("reading_winddirection")
val hour = item.getString("hour")
if(item.getDouble("maxspeed") > max)
max = item.getDouble("maxspeed")
if(item.getDouble("minspeed")< min)
min = item.getDouble("minspeed")
var icon = BitmapFactory.decodeResource(applicationContext.getResources(),
R.drawable.direction0)
val rotatedBitmap = icon.rotate(reading_direction.toFloat())
var d: Drawable = BitmapDrawable(getResources(), rotatedBitmap)
yVals.add(Entry(hour.toFloat(), reading_temperature.toFloat(), d))
}
我需要将风向读数显示为箭头,原始 bmp 是一个旋转为 0°(指向上方)的箭头,我有一个 for 循环,我可以在其中从数据库中检索度数,我可以设置可绘制对象到我的 mpandroidchart,但我需要旋转那个 drawable。
val jsonTemperatureData = JSONArray(result?.get(0))
for (i in 0 until jsonTemperatureData.length()) {
val item = jsonTemperatureData.getJSONObject(i)
val reading_temperature = item.getString("reading_windspeed")
val degrees= item.getString("degrees")
yVals.add(Entry(hour.toFloat(), reading_temperature.toFloat(), ContextCompat.getDrawable(getApplicationContext(),R.drawable.direc)))
}
如何在这个循环中设置从 val degrees= item.getString("degrees")
到 R.drawable.direc
的浮点值?
如果您使用的是 imageView,则有一个 属性:rotation
如果您有类似下面的代码:
<ImageView
android:id="@+id/imageView"
android:layout_width="60dp"
android:layout_height="60dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
下面的代码适合我:
imageView.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.direc))
imageView.rotation = imageView.rotation + degrees.toFloat()
与其旋转可绘制对象,我建议您旋转 ImageView
。
Matrix matrix = new Matrix();
imageView.setScaleType(ImageView.ScaleType.MATRIX); //required
val bounds: Any = imageView.getDrawable().getBounds()
matrix.postRotate( YOUR_ANGLE_GOES_HERE, bounds.width()/2, bounds.height()/2);
imageView.setImageMatrix(matrix);
或
mImageView.setRotation(YOUR_ANGLE_GOES_HERE)
与 API>=11
Source
我找到了解决方案,MPAndroidChart 只接受可绘制对象作为其图表的图标,我想旋转该可绘制对象(如果有 ImageViews 会很容易)。
所以解决方案是将可绘制对象转换为位图,旋转该位图,然后将其转换回可绘制对象并将其设置为图标:
val jsonTemperatureData = JSONArray(result?.get(0))
for (i in 0 until jsonTemperatureData.length()) {
val item = jsonTemperatureData.getJSONObject(i)
val reading_temperature = item.getString("reading_windspeed")
val reading_direction = item.getString("reading_winddirection")
val hour = item.getString("hour")
if(item.getDouble("maxspeed") > max)
max = item.getDouble("maxspeed")
if(item.getDouble("minspeed")< min)
min = item.getDouble("minspeed")
var icon = BitmapFactory.decodeResource(applicationContext.getResources(),
R.drawable.direction0)
val rotatedBitmap = icon.rotate(reading_direction.toFloat())
var d: Drawable = BitmapDrawable(getResources(), rotatedBitmap)
yVals.add(Entry(hour.toFloat(), reading_temperature.toFloat(), d))
}