`

动态更新view形成动画的方法--onDraw

阅读更多
我们可以继承ImageView等view通过onDraw来将你想要画的东西画到canvas上,然后通过Invalidate来是canvas重画。
下面是平滑移动图片的效果:
//继承imageView
package com.android.ActivityAlbum;

import java.util.ArrayList;

import com.android.ActivityAlbum.AlbumWidget.UpdateService;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

public class SliderImageView extends ImageView {
private Bitmap lbitmap;
private Bitmap rbitmap;
private Drawable ldrawable;
private Drawable rdrawable;
private static ArrayList<String> photos = new ArrayList<String>();
private static int photo_count = 0;
private static int time=1;
private Resources res;
public static int length = 5;
int mlength=0;
public SliderImageView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
photos = AlbumWidget.photos;
res=getResources();


}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
// drawable=Slider.drawable;
if (photo_count != photos.size()) {
if(time==1){
ldrawable = UpdateService.getDrawable(res, photo_count);
lbitmap = Utilities.createIconThumbnail(ldrawable, 230, 350);

if (photo_count != photos.size() - 1) {
rdrawable = UpdateService.getDrawable(res, photo_count+1);
rbitmap = Utilities.createIconThumbnail(rdrawable, 230, 350);
} else {
rdrawable = UpdateService.getDrawable(res, 0);
rbitmap = Utilities.createIconThumbnail(rdrawable, 230, 350);
}
}
canvas.drawBitmap(lbitmap, -mlength, 0, null);
canvas.drawBitmap(rbitmap, 230-mlength, 0, null);
if(time==47){
photo_count++;
time=1;
mlength=0;
}
else{
time++;
mlength=mlength+length;
}

} else {
photo_count = 0;
}

}



}

在Activity里通过一个thread和handler来使调用invalidate
class photothread  implements Runnable{

@Override
public void run() {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = UPDATEPHOTO;
photohandler.sendMessage(msg);

}

}

Handler photohandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATEPHOTO:
mimgvp.invalidate();
// System.out.println("update photos");
}
}
};
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    RainyView-Android 自定义View之下雨动画 效果.zip

    将这个云的path移动,缩小,并将其路径转换到mRightCloudPath即可在onDraw()的时候,调用以下方法就可以描绘路径了canvas.drawPath()接下来我们来实现云的动画,我们由上面已经了解到:/**  * Transform the ...

    Android中View的炸裂特效实现方法详解

    本文实例讲述了Android中View的炸裂特效实现方法。...ExplosionField 继承自 View,在 onDraw 方法中绘制动画特效,并且它提供了一个 attach2Window 方法,可以把 ExplosionField 最为一个子 View 添加到 Ac

    Android使用自定义View绘制渐隐渐现动画

    用属性动画或者渐变填充(Shader)可以做到一笔一笔的变化,但要想一笔渐变(手指不抬起边画边渐隐),没在Android中找到现成的API可用。所以,自己做了一个。 基本的想法是这样的: 在View的onTouchEvent中记录触摸...

    Android利用SurfaceView实现下雨的天气动画效果

    可以看到效果图中的雨滴的下落速度很快,那么意味着每一帧都要调用 onDraw() 一次使其重新绘制一次,假如你的 onDraw() 方法里面的渲染代码稍微有点费时,而 View 的 onDraw() 方法调用是在 UI 线程中,那么绘制出

    自定义view,父容器无限onmeasure、 onlayout

    背景:楼主本人的电脑在某一段时间使用过程中,只要一启动模拟器上我们的APP,电脑散热风扇的声音就加大,...这个自定义view在onDraw方法中,调用了一个很不起眼的方法:setLayoutParams. 将这个方法去掉之后,界面滑动

    Android 自定View实现仿QQ运动步数圆弧及动画效果

    初步分析:完全自定义View重写onDraw()方法,画圆弧。 3.画一个圆弧必备知识 在Canvas中有一个画圆弧的方法 drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)//画弧, ...

    Android自定义View绘图实现渐隐动画

    用属性动画或者渐变填充(Shader)可以做到一笔一笔的变化,但要想一笔渐变(手指不抬起边画边渐隐),没在Android中找到现成的API可用。所以,自己做了一个。 基本的想法是这样的: •在View的onTouchEvent中记录...

    第四章 自定义组件、动画

    文章目录第四章 自定义组件、动画(一)View体系(1)View简介(2)Android坐标系(3)视图坐标系(二)自定义View(1)onMeasure:对当前View的尺寸进行测量(2)重写onMeasure(3)重写onDraw:绘制当前View(4)...

    Android代码-一个别致的环形菜单

    CircleMenu CircleMenu 是一个精美别致...如果这个动画针对的是一个 View 对象,我想使用 ObjectAnimator 可以很快解决。但是现在是在 onDraw 中绘制这一动画效果。最困难的是绘制圆环扩散变透明直至消失这一动画效果

    Android 自定义view仿支付宝咻一咻功能

    还有就是这是好几个圆,然后执行的动画有个延迟效果,其实这些动画是放在一起执行的,熟悉属性动画的知道已经给我们提供了同步执行动画和顺序执行动画的实现api,也会会有人说这几个view就是在onDraw()方法中画几个圆,...

    Android自定义加载圈动画效果

    以上3个动画都是通过ValueAnimator来实现,配合自定义View的onDraw()方法实现不断的刷新和绘制界面. 具体代码如下: package blog.csdn.net.mchenys.myanimationloading; import android.animation.Animator; import ...

    Android - SwitchButton 开关按钮 的多种实现方式 (源码)

    可以查看官方文档,之后继承CompuundButton,在布局的动画和显示上调用onDraw(Canvas canvas)重画既可以,如果想要加入拖动属性,那么在该VIEW内重写触摸事件onTouchEvent(MotionEvent ev)在里面判断拖动距离,之后...

    Android App中使用SurfaceView制作多线程动画的实例讲解

    但是在其他线程中却不能修改UI元素,例如用后台线程更新自定义View(调用View的在自定义View中的onDraw函数)是不允许的。 如果需要在另外的线程绘制界面、需要迅速的更新界面或则渲染UI界面需要较长的时间,这种...

    TanTanRippleView-仿探探进入 扫描view.zip

     }然后在onDraw中,值得一提的是为了防止被扫描的部分挡住,这里的代码需要写在onDraw方法的后部分。for (i in 0 until rippleCircles.size) {  rippleCircles[i].draw(canvas)  }在startRipple()方法中添加...

    HearthStone-android-groovy:Hearth Stone,Android,Groovy,炉石传说,炉石界面框架逻辑动画等学习用项目

    之后把 heroView等从layout改成view,各元素在onDraw中实现 把clone改成AutoClone 武器/技术 是有正/反面的(使用前/后),之后要加上 RecyclerView中的元素怎么居中显示 MysteryAreaView 有空写写 ActionView 每次操作 ...

    Android自定义View制作动态炫酷按钮实例解析

    所有的实现都是基于自定义View,采用最底层的onDraw一点一点的画出来的。没有采用一丁点的动画。虽然演示时间很短,但是要完成这么多变化,还是挺吃力。 首先讲解用法:  public class MainActivity extends ...

    【Android】自定义圆形进度条效果(有进度标识点)

    // TODO 自动生成的方法存根 super.onDraw(canvas); int width = this.getWidth(); int height = this.getHeight(); width = (width &gt; height) ? height : width; height = (width &gt; height) ? height : ...

    Android自定义View实现QQ音乐中圆形旋转碟子

    2、获取我们res的图片资源后,在ondraw方法中进行绘制圆形图片 3、通过Handler发送Runnable来启动旋转线程(如果只想做圆形头像的话,这步可以去掉) 4、在布局中使用我们的View 效果图: 贴出我们的变量信息: ...

    AutoScrollTextView4Peelson:自定义的跑马灯效果TextView

    )拟解决思路:自定义View继承TextView利用Runnable循环调用onDraw()方法更新视图,利用ScrollTo()进行滑动时刻注意观察自己怎么写代码的参考规范文档!!!!!动画参考:任务结束回调接口(用了之前自己写的一个)...

    Android开发之图形图像与动画(一)Paint和Canvas类学习

    Paint类 *Paint类代表画笔,用来描述图形的... *通常情况下,要在Android中绘图,需要先创建一个继承自View类的视图,并且在该类中重写它的onDraw方法, *然后在显示绘图的Activity中添加该视图 实现此实例的xml文件的

Global site tag (gtag.js) - Google Analytics