android 圆 旋转按钮,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布局中,然后将诸如ImageView或其他LinearLayout之类的View放入其中:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_gravity="center"

android:gravity="center"

android:orientation="horizontal" >

android:id="@+id/myImage"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_margin="5dip"

android:src="@drawable/main01" />

在onCreate()方法中:

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

在按钮的onClickListener中:

protected void btnRotate_onClick() {

llParent.rotate();

}

更新2:

您可以在实际旋转之前使用动画进行旋转(llParent.rotate();).它需要一个类似rotate_dialog.xml的动画布局:

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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值