Android 自定义 按当前view的宽高进行矩形移动内容图
2016-04-18 10:56
543 查看
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.view.View;
/**
* 按当前view的宽高进行矩形移动 内容图
*
* author : stone
* email : aa86799@163.com
* time : 16/4/15 10 18
*/
public class RectTransView extends View {
private Bitmap mBitmap;
private int bw;
private int bh;
private int l, t;
private int speed = 10;
private int state;
private float degress;
public RectTransView(Context context) {
super(context);
// setBackgroundColor(Color.parseColor("#dcaa0000"));
}
public void setBitmapResid(int resid) {
mBitmap = BitmapFactory.decodeStream(getResources().openRawResource(resid));
bw = mBitmap.getWidth();
bh = mBitmap.getHeight();
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mBitmap == null) {
return;
}
int w = getMeasuredWidth();
int h = getMeasuredHeight();
Matrix matrix;
speed = (int) (Math.random() * 20);
switch (state) {
case 0: {
if (l + speed <= w - bw) {
l += speed;
} else {
l = w - bw;
state = 1;
}
}
break;
case 1: {
if (t + speed <= h - bh) {
t += speed;
} else {
t = h - bh;
state = 2;
}
}
break;
case 2: {
if (l > speed) {
l -= speed;
} else {
l = 0;
state = 3;
}
}
break;
case 3: {
if (t > speed) {
t -= speed;
} else {
t = 0;
state = 0;
}
}
break;
}
matrix = new Matrix();
matrix.postTranslate(l, t);
degress += 4;
matrix.postRotate(degress);
Bitmap createBitmap = Bitmap.createBitmap(mBitmap, 0, 0, bw, bh, matrix, true);
canvas.drawBitmap(createBitmap, null, new Rect(l, t, l + bw, t + bh), null);
invalidate();
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
RectTransView anim = new RectTransView(this);
anim.setBitmapResid(R.mipmap.ic_launcher_android);
int widthPixels = getResources().getDisplayMetrics().widthPixels;
int heightPixels = getResources().getDisplayMetrics().heightPixels;
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
widthPixels/2, heightPixels/2);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
layout.addView(anim, params);
}
}
相关文章推荐
- Android 5.0 Material主题 ProgressBar颜色更改。
- android七牛多张图片上传
- Android公共属性,常用组件
- Android 继承BaseActivity的典型用法
- Android Studio 下安卓 jni 开发错误 undefined reference to __android_log_print
- android 防止Button的频繁点击,多次执行点击事件
- Android 分享一个SharedPreferences的工具类,方便保存数据
- 一套效果图适配(Android和IOS)全尺寸和标注规范-(结果)
- android studio 快捷键大全
- android handler的警告Handler Class Should be Static or Leaks Occur
- 【day0418 Android】1. 使用Android的日志工具Log
- 加速Android Studio的Gradle构建速度
- android studio 2.0 下创建JNI应用
- Android dp2px
- android 特殊用户通知用法汇总--Notification源码分析
- 首款Ubuntu手机BQ-Aquaris E4.5刷安卓教程
- Android相关权限的概念
- Android中Activity的生命周期
- Android Viewbadger 实现消息数字提示
- 关于 Android 进程保活,你所需要知道的一切