您的位置:首页 > 其它

仿乐安全首页动态效果

2015-01-25 20:20 344 查看
转载自:/article/1377979.html



局:

[html] view
plaincopy





<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

tools:context=".MainActivity" >

<FrameLayout

android:layout_width="match_parent"

android:layout_height="match_parent" >

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

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

<ImageView

android:id="@+id/iv_rotate"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

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

<com.example.view.RadiationView

android:id="@+id/rv"

android:layout_width="250dp"

android:layout_height="250dp"

android:layout_gravity="center" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:text="SB"

android:textColor="#ffffff"

android:textSize="30sp" />

</FrameLayout>

</LinearLayout>

旋转动画:

[java] view
plaincopy





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

<rotate xmlns:android="http://schemas.android.com/apk/res/android"

android:duration="12000"

android:fromDegrees="0"

android:pivotX="50%"

android:pivotY="50%"

android:startOffset="0"

android:interpolator="@android:anim/linear_interpolator"

android:repeatCount="infinite"

android:repeatMode="restart"

android:toDegrees="360" />


带辐射效果的view:

[java] view
plaincopy





package com.example.view;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.os.Handler;

import android.util.AttributeSet;

import android.util.Log;

import android.view.View;

/**

* @author Rowandjj

*

*带辐射效果的view

*/

public class RadiationView extends View

{

/**

*画笔

*/

private Paint mPaint = new Paint();



/**

*颜色

*/

private int mColor = 0x3f990e;



/**

* 透明度

*/

private int mAlpha = 60;



private Handler mHandler = null;



private static final int MESSAGE_DRAW = 0;

private static final String TAG = "RadiationView";



private int width;

private int height;



/**

* 扩散速度

*/

private int speed = 30;

/**

*最大辐射半径

*/

private int maxRadius = 100;





private int centerX;

private int centerY;



/**

* 最小半径

*/

private int minRadius = 70;

/**

* 当前半径

*/

private int radius = minRadius;



private boolean isStarted = false;



public RadiationView(Context context)

{

super(context);

init();

}

public RadiationView(Context context, AttributeSet attrs)

{

super(context, attrs, 0);

init();

}

public void startRadiate()

{

isStarted = true;

mHandler.sendEmptyMessage(MESSAGE_DRAW);

}



private void init()

{

mPaint = new Paint();

mPaint.setStrokeWidth(1);

//必须先设置color,再设置alpha

mPaint.setColor(mColor);

mPaint.setAlpha(mAlpha);



mHandler = new Handler()

{

public void handleMessage(android.os.Message msg)

{

if(msg.what == MESSAGE_DRAW)

{

invalidate();

if(isStarted)

{

sendEmptyMessageDelayed(MESSAGE_DRAW,speed);

}

}

}

};

}



@Override

protected void onLayout(boolean changed, int left, int top, int right,

int bottom)

{

super.onLayout(changed, left, top, right, bottom);

width = this.getWidth();

height = this.getHeight();

if(width <= 0 || height<=0)

{

throw new RuntimeException("size illegal");

}

//中心点

centerX = width/2;

centerY = height/2;

//最大辐射半径

maxRadius = (width > height) ? height/2 : width/2;

Log.i(TAG,"MAX"+maxRadius);

if(maxRadius < 70)

{

throw new RuntimeException("size too small");

}

}

@Override

protected void onDraw(Canvas canvas)

{

mPaint.setColor(mColor);

mPaint.setAlpha(mAlpha);

if(radius <= 0)

{

return;

}

if(radius > maxRadius)

{

radius = minRadius;

}

canvas.save();

canvas.drawCircle(centerX, centerY, radius, mPaint);

canvas.restore();

radius += 1;

}

@Override

protected void onAttachedToWindow()

{

super.onAttachedToWindow();

this.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

}



public void setColor(int color)

{

this.mColor = color;

}



public void setSpeed(int speed)

{

this.speed = speed;

}



public void setMinRadius(int radius)

{

this.minRadius = radius;

}

}

调用的代码:

[java] view
plaincopy





package com.example.animdemo1;

import android.app.Activity;

import android.os.Bundle;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.widget.ImageView;

import com.example.view.RadiationView;

public class MainActivity extends Activity

{

private ImageView iv = null;

private RadiationView rv = null;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);



iv = (ImageView) findViewById(R.id.iv_rotate);

rv = (RadiationView) findViewById(R.id.rv);

rv.setMinRadius(70);//辐射半径

rv.startRadiate();//开始辐射

Animation anim = AnimationUtils.loadAnimation(this, R.anim.rotate_circle_anim);

iv.startAnimation(anim);//开始动画

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: