gpt4 book ai didi

android - Android 应用程序需要一个可旋转的圆圈。自定义对象或小部件?

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:57 27 4
gpt4 key购买 nike

我需要为我的应用程序创建一个旋转并包含数据的圆圈。我应该为我的应用程序创建一个自定义对象还是应该制作一个应用程序内小部件?

关于这个主题,您如何在应用程序中引用小部件而不是 android 桌面的独立小部件?

最佳答案

这是一个可旋转的LinearLayout,你可以把所有的东西都放在里面,如果你自定义它,你可以旋转它的度数。使用 rotate() 方法旋转它并...

尽情享受吧! ;)

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.LinearLayout;

public class RotateLinearLayout extends LinearLayout {

private Matrix mForward = new Matrix();
private Matrix mReverse = new Matrix();
private float[] mTemp = new float[2];
private float degree = 0;

public RotateLinearLayout(Context context) {
super(context);
}

public RotateLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void dispatchDraw(Canvas canvas) {

try {
if (degree == 0) {
super.dispatchDraw(canvas);
return;
}
canvas.rotate(degree, getWidth() / 2, getHeight() / 2);

mForward = canvas.getMatrix();
mForward.invert(mReverse);
canvas.save();
canvas.setMatrix(mForward); // This is the matrix we need to use for
// proper positioning of touch events

super.dispatchDraw(canvas);
canvas.restore();
invalidate();
} catch (Exception e) {

}

}

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (degree == 0) {
return super.dispatchTouchEvent(event);
}
// final float[] temp = mTemp;
// temp[0] = event.getX();
// temp[1] = event.getY();
// mReverse.mapPoints(temp);
// event.setLocation(temp[0], temp[1]);
event.setLocation(getWidth() - event.getX(), getHeight() - event.getY());
return super.dispatchTouchEvent(event);
}

public void rotate() {
if (degree == 0) {
degree = 180;
} else {
degree = 0;
}
}

}

更新:

将此代码添加到您的 xml 布局中,并将您的 View (如 ImageView 或其他 LinearLayout)放入其中:

<org.mabna.order.ui.RotateLinearLayout  android:id="@+id/llParent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:gravity="center"
android:orientation="horizontal" >



<ImageView
android:id="@+id/myImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:src="@drawable/main01" />

</org.mabna.order.ui.RotateLinearLayout>

在 onCreate() 方法中:

llParent = (RotateLinearLayout) this.findViewById(R.id.llParent);

在按钮的 onClickListener 中:

protected void btnRotate_onClick() {
llParent.rotate();
}

更新2:

您可以在真正旋转之前使用动画进行旋转 (llParent.rotate();)。它需要像 rotate_dialog.xml 这样的动 Canvas 局:

<?xml version="1.0" encoding="utf-8"?>

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000" android:fromDegrees="-180" android:toDegrees="0"
android:pivotX="50%" android:pivotY="50%" android:fillAfter="true" />

在你的代码中:

protected void btnRotate_onClick() {
// rotate
Animation rotateAnimation = AnimationUtils.loadAnimation(this,
R.anim.rotate_dialog);
llParent.startAnimation(rotateAnimation);
llParent.rotate();
}

关于android - Android 应用程序需要一个可旋转的圆圈。自定义对象或小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10809070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com