在 canvas android 上旋转矩形
Rotating rectangle on canvas android
我创建了一个 activity 将另一个 activity 设置为视图,在这个 activity 我创建了 Canvas (onDraw) 并在一个矩形内,现在我想旋转它,我试过 canvas.rotate()
但似乎没有任何反应。这是我的代码:
public class DrawView extends View {
Paint paint = new Paint();
private Rect rec1;
public DrawView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
DisplayMetrics metrics = new DisplayMetrics();
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);
int y = metrics.heightPixels;
int x = metrics.widthPixels;
rec1 = new Rect(x / 2 - 25, 0, x / 2 + 25, y);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(3);
canvas.drawRect(rec1, paint);
for (int j = 1; j <= 200; j++) {
canvas.rotate(5);
}
}
有人知道问题出在哪里吗?我还检查了问题是否在 for
中,所以我将其删除并添加了一行 canvas.rotate(45)
,但什么也没有。
如果需要,这里是 MainActivity
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
public class MainActivity extends Activity {
DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
}
}
谢谢大家:)
绘制前需要旋转:
canvas.rotate(45);
canvas.drawRect(rec1, paint);
anim/rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:repeatMode="restart"
android:repeatCount="infinite"
android:interpolator="@android:anim/linear_interpolator"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="1500" />
<View
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#f90"
android:id="@+id/rect"/>
View rect = findViewById(R.id.rect);
Animation rotate = AnimationUtils.loadAnimation(this, R.anim.rotate);
rect.startAnimation(rotate);
我创建了一个 activity 将另一个 activity 设置为视图,在这个 activity 我创建了 Canvas (onDraw) 并在一个矩形内,现在我想旋转它,我试过 canvas.rotate()
但似乎没有任何反应。这是我的代码:
public class DrawView extends View {
Paint paint = new Paint();
private Rect rec1;
public DrawView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
DisplayMetrics metrics = new DisplayMetrics();
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);
int y = metrics.heightPixels;
int x = metrics.widthPixels;
rec1 = new Rect(x / 2 - 25, 0, x / 2 + 25, y);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(3);
canvas.drawRect(rec1, paint);
for (int j = 1; j <= 200; j++) {
canvas.rotate(5);
}
}
有人知道问题出在哪里吗?我还检查了问题是否在 for
中,所以我将其删除并添加了一行 canvas.rotate(45)
,但什么也没有。
如果需要,这里是 MainActivity
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
public class MainActivity extends Activity {
DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
}
}
谢谢大家:)
绘制前需要旋转:
canvas.rotate(45);
canvas.drawRect(rec1, paint);
anim/rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:repeatMode="restart"
android:repeatCount="infinite"
android:interpolator="@android:anim/linear_interpolator"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="1500" />
<View
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#f90"
android:id="@+id/rect"/>
View rect = findViewById(R.id.rect);
Animation rotate = AnimationUtils.loadAnimation(this, R.anim.rotate);
rect.startAnimation(rotate);