`

动态更新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");
}
}
};
分享到:
评论
发表评论

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

相关推荐

    OnDraw--paint.setColorFilter

    当你想要在视图上呈现自己的图形、图案或者动画时,通常需要重写 `onDraw()` 方法。`OnDraw()` 提供了一个空的画布,允许开发者使用 `Canvas` 对象进行绘图操作。 `ColorFilter` 是 Android 的绘图系统中的一个重要...

    自定义View之Ondraw源码

    在绘制完成后,如果View需要再次更新,`onDraw()`会被再次调用,形成一个循环。 在自定义View时,你需要覆写`onDraw()`方法,并在其内部实现自己的绘图逻辑。例如: ```java @Override protected void onDraw...

    android高仿墨迹天气背景动画效果-云,风,雪等效果源码.zip

    云朵飘动的动画可能通过自定义View实现,该View继承自View类并重写onDraw()方法。在onDraw()中,根据时间动态改变云朵的位置,然后使用canvas.drawBitmap()绘制云朵图片。同时,可以使用Handler或者ValueAnimator来...

    Android自定义View app更新动画详解

    在Android开发中,自定义View是一项...在编写自定义View时,需要合理地控制动画的执行顺序,监听动画状态,并在`onDraw`方法中动态更新视图。通过这种方式,开发者可以创造出丰富多样的交互体验,提升app的用户体验。

    android自定义view之---组合view

    - **同步更新**:为了确保动画与实际加载进度同步,我们需要监听加载过程并在适当的时候更新ProgressBar的值。 - **自定义属性**:为了方便在XML布局文件中配置,我们可以定义自定义属性,如动画速度、加载颜色等...

    Android自定义view,动画

    3. **绘制View**:关键在于重写`onDraw()`方法,这是绘制自定义View内容的地方。使用`Canvas`对象,你可以绘制线条、形状、文本等。`Canvas`提供了如`drawRect()`, `drawCircle()`, `drawText()`等方法。 4. **尺寸...

    安卓动画效果相关-安卓中自定义View实现下雪效果.zip

    为了实现动画效果,开发者可能会使用到安卓的动画框架,比如ValueAnimator或ObjectAnimator,或者通过重写View的onDraw()方法并在每次绘制时更新雪花的位置。这种做法通常需要在一个循环中不断调用postInvalidate()...

    自定义View--带有动画效果的柱状图

    通过监听动画的进度,我们可以实时更新柱子的高度,并调用invalidate()方法触发重绘。 6. **计算柱子位置**:在绘制柱子时,需要根据数据计算每个柱子在屏幕上的位置。这涉及到计算每个柱子的宽度、间距,以及起始...

    Android 自定义View实现动画时钟

    本项目"Android 自定义View实现动画时钟"就是一个很好的示例,它展示了如何利用自定义View和ValueAnimator来创建一个实时更新并带有动画效果的时钟组件。 首先,自定义View通常涉及到以下几个步骤: 1. **创建View...

    自定义View----点击滑动选择字母列表

    在这个类中,你需要重写`onDraw()`方法来绘制View的外观,以及`onMeasure()`方法来确定View的尺寸。 2. **手势识别**:为了响应用户的点击和滑动操作,需要实现`OnClickListener`和`OnTouchListener`接口。`onClick...

    安卓Android源码——高仿墨迹天气背景动画效果-云,风,雪等.rar

    在Android中,通常会使用自定义View或者Canvas来绘制这样的动画,通过重写`onDraw()`方法,在每一帧中更新粒子的位置和状态。可能使用了一些技巧,比如矩阵变换(Matrix)来实现物体的移动,以及时间间隔控制...

    安卓开发-高仿墨迹天气背景动画效果-云,风,雪等.zip

    在自定义View中,通常会重写`onDraw()`方法,利用`Canvas`对象进行绘图。开发者可能使用了`Path`对象来绘制云朵的形状,用`Paint`对象设置颜色、透明度和线条样式等属性,然后通过`canvas.drawPath()`来渲染到屏幕...

    自定义View点击动画效果

    在自定义View中,我们需要覆盖`onDraw()`方法,用于绘制视图的外观。在正常状态下,我们可以使用`canvas.drawRoundRect()`来绘制圆角矩形。为了实现渐变效果,可以使用`ObjectAnimator`来改变圆角半径,让矩形的角...

    Android属性动画与自定义View——实现vivo x6更新系统的动画效果

    在Android开发中,属性动画(Property Animation)和自定义View是两个重要的技术点,它们能够帮助开发者创造出丰富、动态的用户界面。本篇文章将聚焦于如何利用这些技术来实现类似vivo x6更新系统的水波纹动画效果。...

    仿Siri动画

    为了实现平滑的动画效果,可以使用postInvalidate()方法在一定时间间隔后重新绘制View,形成连续的动画帧。 其次,为了实现动画的动态变化,可能需要使用到ValueAnimator或ObjectAnimator。这些是Android提供的高级...

    安卓Andriod源码——高仿墨迹天气背景动画效果-云,风,雪等.zip

    例如,为了制作云朵飘动的效果,开发者可能创建了一个CloudView类,重写了onDraw()方法,使用Canvas绘制云朵,并通过动画系统控制其位置变化。同样,对于风的效果,可能是通过改变背景颜色或者视图的旋转角度来实现...

    Android应用源码之高仿墨迹天气背景动画效果-云,风,雪等.zip

    5. **多线程处理**:由于复杂的动画可能会影响主线程的性能,开发者可能会选择在工作线程中执行动画逻辑,然后通过Handler或postInvalidate()方法更新UI。这有助于保持应用的流畅性。 6. **XML动画资源**:虽然属性...

    Android加载动画Android-SpinKit.zip

    SpinKit项目是基于Java编写的,它包含了多种不同风格和样式的加载动画,如旋转的圆环、旋转的箭头、波浪滚动等,这些动画都是用自定义View实现的,通过重写onDraw()方法进行绘制。开发者可以根据自己的需求选择适合...

    圆形动画-加载条

    - `AnimatorUpdateListener`:监听动画更新,每次动画帧改变时,更新进度并调用`invalidate()`触发视图重绘。 4. **属性绑定**: - `android:attr/progressDrawable`:在XML布局中,可以使用自定义的Drawable来...

Global site tag (gtag.js) - Google Analytics