自动移动的ImageView
图片会慢慢的向左移动,到头了后,再循环
其实这个效果和屏幕背景图片的效果差不多,屏幕背景图是随着滑动来慢慢的滚动,这是自己每个n秒开始动。实现方式自然是用自定的控件了。这次继承的是ImageView,实现原理是用一个handler来更新x坐标,没隔10毫秒来通知下handler,让其计算下x坐标的值。然后通过invalidate();方法来通知重新绘制图片,这样就能多次调用onDraw()方法了。
MyImageView.java
package com.kale.imageview03; import java.util.Timer;
import java.util.TimerTask;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.ImageView; /**
* @author wulianghuan
* 该类为自定义ImageView,用于显示背景图片,并显示背景图片到移动效果
*
*/
public class MyImageView extends ImageView{
private Bitmap back; //背景图片资源
private Bitmap mBitmap; //生成位图
private double startX = 0; //移动起始X坐标 //构造函数中必须有context,attributeSet这两个 参数,否则父类无法调用
public MyImageView(Context context,AttributeSet attributeSet)
{
super(context, attributeSet);
//由于不是Activity子类,只能通过DisplayMetrics来获取屏幕信息
DisplayMetrics dm = getResources().getDisplayMetrics();
//屏幕宽度
int screenWidth = dm.widthPixels;
//屏幕高度
int screenHeight = dm.heightPixels; back = BitmapFactory.decodeResource(context.getResources(), R.drawable.rootblock_default_bg);
//将图片拉伸至屏幕的三倍宽
mBitmap = Bitmap.createScaledBitmap(back, screenWidth*3, screenHeight, true); //实现图片自动向左移动,到头了重新移动
final Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
//判断消息的值是否为1,如果是,则表明是由我的程序发过来的
if (msg.what == 1)
{
Log.i("TAG", "-----"+startX);
//如果到头了,将x坐标直接设置为0.这样的效果有些突兀,大概知道个原理即可
if (startX <= -80)
{
startX = 0;
}
else
{
//如果没到头,就减少个坐标
startX -= 0.09;
}
}
invalidate();//将坐标更新后,重绘。会调用onDraw()方法
}
};
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
//发送消息的值为1,handler来判断下这个值,是1就执行。
handler.sendEmptyMessage(1);
}
//无延迟,10毫秒循环一次。
}, 0 , 10); } @Override
public void onDraw(Canvas canvas)
{
Log.i("TAG", "-----onDraw");
Bitmap bitmap2 = Bitmap.createBitmap(mBitmap);
canvas.drawBitmap(mBitmap, (float)startX , 0 , null);
}
}
自动移动的ImageView的更多相关文章
- Android 实用开源控件
图片放大缩小: PinchImageView 体验最好的图片手势控件,不同分辨率无缝切换,可与ViewPager结合使用. GestureViews 带有手势控制的ImageView和FrameLay ...
- ImageView缩放选项
ImageView.ScaleType 将图片边界缩放到所在view边界时的缩放选项. Options for scaling the bounds of an image to the bounds ...
- 自定义控件之 圆形 / 圆角 ImageView
一.问题在哪里? 问题来源于app开发中一个很常见的场景——用户头像要展示成圆的: 二.怎么搞? 机智的我,第一想法就是,切一张中间圆形透明.四周与底色相同.尺寸与头像相同的蒙板图片,盖在 ...
- android ImageView网络图片加载、动态设置尺寸、圆角..
封装了一个关于ImageView的辅助类,该类可以方便实现网络图片下载的同时,动态设置图片尺寸.圆角.....一系列连贯的操作,无样式表,java代码实现所有功能,使用很方便. package com ...
- 实用的圆形图片控件ImageView
1.用法直接在布局中引用即可 import android.content.Context;import android.content.res.TypedArray;import android.g ...
- iOS学习-UIButton的imageView和titleLabel
UIButton的imageView和titleLabel的位置设置通过setImageEdgeInsets和setTitleEdgeInsets来设置 参考:http://blog.csdn.net ...
- 通过style控制圆形imageView显示
1. 2.drawable--style <?xml version="1.0" encoding="utf-8"?> <layer-list ...
- 【腾讯Bugly干货分享】Android ImageView 正确使用姿势
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5832602d7196970d65901d76 导语 本文主要介绍了ImageV ...
- ImageView设置边框的两种方式
转载:http://www.2cto.com/kf/201308/239945.html package cc.testimageviewbounds; import android.os.Bundl ...
随机推荐
- Latex常用整理
会不断更新添加,以便写论文的时候快速查找. 项目 带编号 \begin{enumerate} \setlength{\itemsep}{0pt} \setlength{\parsep}{0pt} \s ...
- P(查准率),R(查全率),F1 值
起源: 我们平时用的精度 accuracy,也就是整体的正确率 acc=predict_right_num/predict_num 这个虽然常用,但不能满足所有任务的需求.比如,因为香蕉太多了,也不能 ...
- Android中线程通信的方式
Android 跨线程通信 android 中是不允许在主线程中进行 网络访问等事情的因为UI如果停止响应5秒左右的话整个应用就会崩溃,到Android4.0 以后 Google强制规定,与网络相关的 ...
- Parted 手册
https://www.gnu.org/software/parted/manual/parted.html#Using-Parted
- python集合相关操作
集合相关操作 集合是一个无序的,不重复的数据组合,它有着两个主要作用:去重以及关系测试. 去重指的是当把一个列表变成了集合,其中重复的内容就自动的被去掉了 关系测试指的是,测试两组数据之间的交集.差集 ...
- mysql存储引擎innodb、myisam区别
MyISAM与InnoDB的区别是什么? 1. 存储结构 MyISAM:每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩 ...
- usb3.0 monitor is already started
用360 开机加速里找到这个程序,把它从开机启动中删除掉就好.
- 再谈JavaScript中的闭包
一.什么是闭包 闭包就是有权访问另一个函数作用域中变量的函数,因此,闭包的本质是一个函数.当一个内部函数被保存到外部时,就会生成闭包. 二.闭包的作用 1.实现公有变量,即通过局部变量实现全局变量的效 ...
- svn简单记录
记录一下工作中常用到的svn命令 一.文件的提交流程 1.svn up // 先更新本地文件 2.svn st // svn status 查看要提交的文件 3.#svn ci -m &quo ...
- HDU 4751 Divide Groups (2013南京网络赛1004题,判断二分图)
Divide Groups Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...