package com.example.yishengxu.canvas;
import android.animation.ObjectAnimator;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.util.AttributeSet;
import android.util.Property;
import android.view.MotionEvent;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
/**
* Created by yisheng.xu on 10/30/14.
*/
public class CanvasView extends View {
private float mPaddingW;
private float mPaddingH;
private float mRotation;
private List<PointF> mAllPoints = new ArrayList<PointF>();
private PointF mPoint0;
private PointF mPoint1;
private PointF mPoint2;
private PointF mPoint3;
private PointF mPoint4;
private PointF mPoint5;
private PointF mPoint6;
private PointF mPoint7;
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private int touchFlag = 0;
public CanvasView(Context context) {
super(context);
}
public CanvasView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CanvasView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mPaddingW = w / 4;
mPaddingH = h / 4;
mAllPoints.add(new PointF(mPaddingW, mPaddingH));
mAllPoints.add(new PointF(mPaddingW * 3, mPaddingH));
mAllPoints.add(new PointF(mPaddingW, mPaddingH * 2));
mAllPoints.add(new PointF(mPaddingW * 3, mPaddingH * 2));
mAllPoints.add(new PointF(mPaddingW, mPaddingH * 3));
mAllPoints.add(new PointF(mPaddingW * 3, mPaddingH * 3));
mAllPoints.add(new PointF(mPaddingW * 2, mPaddingH));
mAllPoints.add(new PointF(mPaddingW * 2, mPaddingH * 3));
initPoints();
mPaint.setColor(Color.BLUE);
mPaint.setStrokeWidth(20);
mPaint.setStrokeCap(Paint.Cap.ROUND);
super.onSizeChanged(w, h, oldw, oldh);
}
private void initPoints() {
mPoint0 = new PointF(mAllPoints.get(0).x, mAllPoints.get(0).y);
mPoint1 = new PointF(mAllPoints.get(1).x, mAllPoints.get(1).y);
mPoint2 = new PointF(mAllPoints.get(2).x, mAllPoints.get(2).y);
mPoint3 = new PointF(mAllPoints.get(3).x, mAllPoints.get(3).y);
mPoint4 = new PointF(mAllPoints.get(4).x, mAllPoints.get(4).y);
mPoint5 = new PointF(mAllPoints.get(5).x, mAllPoints.get(5).y);
mPoint6 = new PointF();
mPoint7 = new PointF();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.rotate(180 * mRotation, mPaddingW * 2, mPaddingH * 2);
drawLine(canvas, mPoint0, mPoint1);
drawLine(canvas, mPoint2, mPoint3);
drawLine(canvas, mPoint4, mPoint5);
drawLine(canvas, mPoint6, mPoint7);
canvas.restore();
}
private void drawLine(Canvas canvas,PointF start,PointF end) {
if (start.x!=0 && end.x !=0) {
canvas.drawLine(start.x, start.y, end.x, end.y, mPaint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (touchFlag == 0) {
animPoints(mPoint0, mAllPoints.get(2));
animPoints(mPoint4, mAllPoints.get(2));
animPoints(mPoint1, mAllPoints.get(6));
animPoints(mPoint5, mAllPoints.get(7));
touchFlag += 1;
}else if (touchFlag == 1) {
resetPoints();
touchFlag += 1;
}else if (touchFlag == 2) {
animPoints(mPoint0, mAllPoints.get(4));
animPoints(mPoint4, mAllPoints.get(0));
mPoint2 = new PointF(0, 0);
mPoint3 = new PointF(0, 0);
invalidate();
touchFlag += 1;
} else if (touchFlag == 3) {
resetPoints();
touchFlag += 1;
} else {
animPoints(mPoint0, mAllPoints.get(6));
animPoints(mPoint1, mAllPoints.get(3));
animPoints(mPoint5, mAllPoints.get(6));
mPoint2 = new PointF(0, 0);
mPoint3 = new PointF(0, 0);
invalidate();
touchFlag = 1;
}
return super.onTouchEvent(event);
}
private void resetPoints() {
animPoints(mPoint0, mAllPoints.get(0));
animPoints(mPoint1, mAllPoints.get(1));
animPoints(mPoint2, mAllPoints.get(2));
animPoints(mPoint3, mAllPoints.get(3));
animPoints(mPoint4, mAllPoints.get(4));
animPoints(mPoint5, mAllPoints.get(5));
}
private void animPoints(final PointF start, final PointF end) {
ValueAnimator animator = ValueAnimator.ofObject(new TypeEvaluator<PointF>() {
@Override
public PointF evaluate(float v, PointF o, PointF o2) {
start.x = start.x + (end.x - start.x) * v;
start.y = start.y + (end.y - start.y) * v;
invalidate();
return null;
}
}, start, end);
animator.setDuration(1000);
animator.start();
ObjectAnimator animator1 = ObjectAnimator.ofFloat(this, mRotationProperty, 0, 1F);
animator1.setDuration(500);
animator1.start();
}
private Property<CanvasView, Float> mRotationProperty = new Property<CanvasView, Float>(Float.class, "rotation") {
@Override
public Float get(CanvasView object) {
return object.mRotation;
}
@Override
public void set(CanvasView object, Float value) {
object.mRotation = value;
}
};
}
没有合适的资源?快使用搜索试试~ 我知道了~
android动画图标
共82个文件
xml:26个
class:14个
png:8个
需积分: 35 10 下载量 171 浏览量
2014-10-31
16:59:46
上传
评论
收藏 393KB ZIP 举报
温馨提示
android动画图标I am not a gif maker,I am a developer
资源推荐
资源详情
资源评论
收起资源包目录
Canvas.zip (82个子文件)
Canvas
gradlew.bat 2KB
gradlew 5KB
Canvas.iml 828B
gradle.properties 855B
.gradle
2.1
taskArtifacts
fileHashes.bin 21KB
cache.properties.lock 17B
taskArtifacts.bin 43KB
fileSnapshots.bin 98KB
cache.properties 30B
outputFileStates.bin 19KB
app
proguard-rules.pro 669B
src
androidTest
java
com
example
yishengxu
canvas
ApplicationTest.java 359B
main
res
menu
menu_main.xml 309B
drawable-hdpi
ic_launcher.png 9KB
drawable-xhdpi
ic_launcher.png 14KB
drawable
drawable-xxhdpi
ic_launcher.png 19KB
values
strings.xml 216B
styles.xml 197B
dimens.xml 211B
drawable-mdpi
ic_launcher.png 5KB
layout
activity_main.xml 625B
values-w820dp
dimens.xml 358B
java
com
example
yishengxu
canvas
CanvasView.java 6KB
MainActivity.java 369B
AndroidManifest.xml 724B
app.iml 6KB
.gitignore 7B
build
outputs
apk
app-debug-unaligned.apk 56KB
app-debug.apk 56KB
intermediates
dex
debug
classes.dex 10KB
res
resources-debug.ap_ 50KB
test
debug
debug
menu
menu_main.xml 392B
drawable-mdpi-v4
ic_launcher.png 5KB
drawable-xxhdpi-v4
ic_launcher.png 18KB
values-w820dp-v13
values.xml 234B
drawable-xhdpi-v4
ic_launcher.png 14KB
values
values.xml 779B
drawable-hdpi-v4
ic_launcher.png 9KB
layout
activity_main.xml 714B
values-v21
resources-debug-test.ap_ 776B
manifests
test
debug
AndroidManifest.xml 675B
tmp
full
debug
AndroidManifest.xml 872B
ndk
debug
obj
lib
assets
test
debug
debug
symbols
test
debug
debug
dependency-cache
debug
classes
debug
com
example
yishengxu
canvas
MainActivity.class 537B
BuildConfig.class 856B
R$layout.class 433B
CanvasView$1.class 1KB
R$id.class 451B
R$drawable.class 437B
R$dimen.class 491B
R$attr.class 370B
CanvasView$2.class 2KB
R$menu.class 423B
R.class 777B
R$string.class 502B
CanvasView.class 6KB
R$style.class 425B
incremental
aidl
test
debug
dependency.store 5B
debug
dependency.store 5B
mergeResources
test
debug
merger.xml 354B
debug
merger.xml 2KB
mergeAssets
test
debug
merger.xml 172B
debug
merger.xml 264B
pre-dexed
debug
rs
test
debug
obj
lib
debug
obj
lib
tmp
compileDebugJava
generated
res
generated
test
rs
test
debug
debug
source
buildConfig
test
debug
com
example
yishengxu
canvas
test
BuildConfig.java 625B
debug
com
example
yishengxu
canvas
BuildConfig.java 610B
aidl
test
debug
debug
r
test
debug
debug
com
example
yishengxu
canvas
R.java 1KB
rs
test
debug
debug
build.gradle 538B
libs
gradle
wrapper
gradle-wrapper.jar 49KB
gradle-wrapper.properties 230B
.idea
scopes
scope_settings.xml 139B
gradle.xml 438B
misc.xml 396B
vcs.xml 166B
.name 6B
copyright
profiles_settings.xml 74B
modules.xml 351B
encodings.xml 166B
compiler.xml 711B
workspace.xml 91KB
.gitignore 81B
local.properties 440B
settings.gradle 15B
build.gradle 437B
共 82 条
- 1
资源评论
eclipse_xu
- 粉丝: 9595
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功