MainActivity.java package com.example.sufaceviewdemo;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.SystemClock;import android.support.v7.app.AppCompatActivity;import android.os.
package com.example.sufaceviewdemo;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private SurfaceView sv;
/**
* surfaceView单位时间内完成界面的大量多次更新
* surfaceview采用双缓冲机制
* A线程-----更新ui-------后台计算-----更新ui
* B线程------后台计算-----更新ui-----后台计算
* 可以再子线程更新ui
* surfaceview占用很大的内存开销,不能放在主线程中
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sv=findViewById(R.id.sv);
}
public void click(View view){
new Thread(){
@Override
public void run() {
for (int i=0;i<100;i++) {
SurfaceHolder holder = sv.getHolder();
Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.RED);
Paint paint = new Paint();
int radius = 5 + i;
canvas.drawCircle(100, 100, radius, paint);
SystemClock.sleep(100);
holder.unlockCanvasAndPost(canvas);
}
}
}.start();
}
}
ViewActivity.java
package com.example.sufaceviewdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
public class ViewActivity extends AppCompatActivity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
iv=findViewById(R.id.iv);
}
/*
* 透明度动画,alpha
* */
public void alpha(View view){
AlphaAnimation aa=new AlphaAnimation(0.0f,1.0f);
//动画播放时间长度
aa.setDuration(2000);
//设置播放重复次数
aa.setRepeatCount(AlphaAnimation.INFINITE);
//设置重复播放的模式
aa.setRepeatMode(AlphaAnimation.REVERSE);
iv.startAnimation(aa);
}
/*
* 平移动画,trans
* */
public void trans(View view){
TranslateAnimation tt=new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0,
Animation.RELATIVE_TO_PARENT,0.5f,
Animation.RELATIVE_TO_PARENT,0,
Animation.RELATIVE_TO_PARENT,0.5f);
tt.setDuration(2000);
tt.setRepeatCount(Animation.INFINITE);
tt.setRepeatMode(Animation.REVERSE);
iv.startAnimation(tt);
}
/*
* 缩放动画,scale
* */
public void scale(View view){
ScaleAnimation ss=new ScaleAnimation(0.2f,2.0f,
0.2f,2.0f,
Animation.RELATIVE_TO_SELF,0.5F,
Animation.RELATIVE_TO_SELF,0.5F);
ss.setDuration(2000);
ss.setRepeatCount(Animation.INFINITE);
ss.setRepeatMode(Animation.REVERSE);
iv.startAnimation(ss);
}
/**
*旋转动画,rotate
*
*/
public void rotate(View view){
RotateAnimation rr=new RotateAnimation(0,360);
rr.setDuration(2000);
rr.setRepeatCount(Animation.INFINITE);
rr.setRepeatMode(Animation.REVERSE);
iv.startAnimation(rr);
}
public void set(View view){
AnimationSet set=new AnimationSet(false);
AlphaAnimation aa=new AlphaAnimation(0.0f,1.0f);
//动画播放时间长度
aa.setDuration(2000);
//设置播放重复次数
aa.setRepeatCount(AlphaAnimation.INFINITE);
//设置重复播放的模式
aa.setRepeatMode(AlphaAnimation.REVERSE);
iv.startAnimation(aa);
TranslateAnimation tt=new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0,
Animation.RELATIVE_TO_PARENT,0.2f,
Animation.RELATIVE_TO_PARENT,0,
Animation.RELATIVE_TO_PARENT,0.2f);
tt.setDuration(2000);
tt.setRepeatCount(Animation.INFINITE);
tt.setRepeatMode(Animation.REVERSE);
iv.startAnimation(tt);
ScaleAnimation ss=new ScaleAnimation(0.2f,2.0f,
0.2f,2.0f,
Animation.RELATIVE_TO_SELF,0.5F,
Animation.RELATIVE_TO_SELF,0.5F);
ss.setDuration(2000);
ss.setRepeatCount(Animation.INFINITE);
ss.setRepeatMode(Animation.REVERSE);
iv.startAnimation(ss);
RotateAnimation rr=new RotateAnimation(0,360);
rr.setDuration(2000);
rr.setRepeatCount(Animation.INFINITE);
rr.setRepeatMode(Animation.REVERSE);
iv.startAnimation(rr);
set.addAnimation(rr);
set.addAnimation(ss);
set.addAnimation(tt);
set.addAnimation(aa);
iv.startAnimation(set);
}
}
activity_main.xml
activity_view.xml
