做TV端有一段时间了,我看到别的TV上有一个通过遥控器的触摸板来控制一张图片的相应方向的抖动,感觉听新奇的,就试着做了一个分享一下:

转载注明出处:http://www.cnblogs.com/hyylog/p/5666806.html

其实很简单,就是通过旋转动画来控制:

直接上代码:

public class ImageSew extends ImageView {
private int state = 0;// 0正常 1上倾斜2下倾斜3做倾斜4右倾斜
private int degress ;
private ValueAnimator startAnimator;
private ValueAnimator endAnimator;

public ImageSew(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
public void initeAnimation(int member, int duration) {
degress = member;
startAnimator = ValueAnimator.ofInt(0,member);
endAnimator = ValueAnimator.ofInt(0,member);
startAnimator.setDuration(duration);
endAnimator.setDuration(duration);
startAnimator.addListener(new AnimatorListener() {

@Override
public void onAnimationStart(Animator animation) {

}

@Override
public void onAnimationRepeat(Animator animation) {

}

@Override
public void onAnimationEnd(Animator animation) {
endAnimator.start();
endAnimator.addListener(new AnimatorListener() {

@Override
public void onAnimationStart(Animator animation) {

}

@Override
public void onAnimationRepeat(Animator animation) {

}

@Override
public void onAnimationEnd(Animator animation) {
setRotationX(0);
setRotationX(0);
}

@Override
public void onAnimationCancel(Animator animation) {

}
});
}

@Override
public void onAnimationCancel(Animator animation) {

}
});

startAnimator.addUpdateListener(new AnimatorUpdateListener() {

@Override
public void onAnimationUpdate(ValueAnimator animation) {
int value = (Integer) animation.getAnimatedValue();
if(state==1)
setRotationX(value);
else if(state==2)
setRotationX(0-value);
else if(state == 3)
setRotationY(0-value);
else if(state == 4)
setRotationY(value);
}
});

endAnimator.addUpdateListener(new AnimatorUpdateListener() {

@Override
public void onAnimationUpdate(ValueAnimator animation) {
int value = (Integer) animation.getAnimatedValue();
if(state==1)
setRotationX(degress-value);
else if(state==2)
setRotationX(value - degress);
else if(state == 3)
setRotationY(value - degress);
else if(state == 4)
setRotationY(degress-value);
}
});
}

@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
}

public void upBitmap() {
state = 1;
start();
}

public void downBitmap() {
state = 2;
start();
}

public void leftBitmap() {
state = 3;
start();
}

public void rightBitmap() {
state = 4;
start();
}

public void start(){
cancelAnimation();
startAnimator.start();
}

public void cancelAnimation(){
startAnimator.cancel();
endAnimator.cancel();
setRotationX(0);
setRotationY(0);
}

}

TV端:通过遥控器的点击实现图片的上下左右抖动的效果的更多相关文章

  1. Android为TV端助力 遥控器的映射

    第一编写kl文件时先在盒子上输入getevent -v查看设备信息,设备信息里有vendor.product.version, 假如分别是xxxx,yyyy,zzzz,那么你的文件名就要命名为Vend ...

  2. Android为TV端助力 电影栏目移动到底部或者顶部时抖动动画

    1 移动到底部上下抖动ObjectAnimator animatorX = ObjectAnimator.ofFloat(holder.itemView,"translationX" ...

  3. CSS 点击img 或者 div 增加抖动(shake)效果

    一般使用场景: 登录的错误验证 或者 强提醒 template 部分 <img id="barcode" :class="{ shaking: toShake}&q ...

  4. TV端产品设计法则和分析

    对TV端产品设计的分析太特么少了.翻遍网络,大多也是针对UI设计的分析,这篇从产品设计的角度,梳理下现有的TV端产品设计法则,顺道做点分析.(前方多图,高能预警) 目录: 1. TV端产品使用场景 2 ...

  5. fastclick.js解决移动端(ipad)点击事件反应慢问题

    参考http://blog.csdn.net/xjun0812/article/details/64919063 http://www.jianshu.com/p/16d3e4f9b2a9 问题的发现 ...

  6. jquery 实现重复点击一个元素时不重复执行效果

    jquery 实现重复点击一个元素时不重复执行效果 这需要用到jquery的stop方法 实例 停止当前正在运行的动画: $("#stop").click(function(){ ...

  7. jquery插件jquery.LightBox.js之点击放大图片并左右点击切换图片(仿相册插件)

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的点击放大图片并左右点击切换图片的效果,您可以根据自己的实 ...

  8. WP8_区分滑动和点击(在图片列表中)

    在windows phone中,对于一个页面中 有图片列表的,滑动的时候,很容易被误认为是点击了图片,而打开图片详细信息等,原意是滑动列表,由此对图片添加2个事件,来控制其点击行为(滑动的时候,基本不 ...

  9. OC可点击的两种轮播图效果

    基本上,每一个APP都有一个轮播图的效果展示,一般都是用来展示图片的一些信息,然后可以点击查看或购买,所以在此我将这种轮播图进行了一个类的封装,效果包含两种形式:第一种,来回轮转样式,第二种,一个方向 ...

随机推荐

  1. Cocos2dx 3.1.1 学习笔记整理(1) 新建项目

    最近手痒了,不小心下载了cocos2dx 3.1.1,又搞了个VS2012,于是头脑发热的搞起 3.1.1了. 我是有多么的不专心啊. 已经把自己之前的学习内容从2.2.3迁移到了3.1.1,除了骨骼 ...

  2. CodeForces 618B Guess the Permutation

    只要找出当前没用过的数字中,大于或等于当前这一列的最大值就可以 #include<cstdio> #include<cstring> #include<cmath> ...

  3. seajs的常用api简易文档

    目前使用sea.js的公司越来越多, 比如朋友网,阿里巴巴,淘宝网,百姓网,支付宝,有道云笔记等.模块化的javascript开发带来了可维护,可扩展性,尤其在多人协作开发的时候不用再担心文件依赖和函 ...

  4. MODBUS协议详解

    MODBUS是一个工业上通信常用的通讯协议,一般在PLC上面用的比较多,主要是定义了一种数据传输的规范,比如数据发给谁,数据是干嘛的,数据错没错,接收到数据的从机告诉我数据有没有接受到等. 传输的方式 ...

  5. form表单传递下拉框的Value和Text值,不适用Jquery传递

    同时获取下拉框的Value和Text值的解决办法:添加一个<input type="text" >文本框,用户选中一项后就将该项的value值给他 然后接受页面获取该文 ...

  6. Datetime.GetDateTimeFormats()的集合

    Asp.net中的日期处理函数//2007年4月24日this.TextBox6.Text = System.DateTime.Now.ToString("D");//2007-4 ...

  7. 【转】成为Linux内核高手的四个方法

    我曾经问别人如何开始内核编程的学习,他们基本上都说:①如果你不需要了解内核是如何为你工作的,你为何要尝试呢?②你应该订阅Linux内核邮件列表,然后努力去理解.③如果你不去编写针对Linux内核的代码 ...

  8. UVa 10258 - Contest Scoreboard

    题目大意:关于acm竞赛排名的题目,对于参赛者首先按做出的题目排名,然后是罚时,最后是编号. 多关键字域排序问题. #include <cstdio> #include <cstri ...

  9. IOS web app一些实用的属性设置

    IOS对safari私有的属性很多,虽然很多不为人知但是却很实用.掌握好这些属性对web app和混合app的开发会很有帮助. 1.format-detection[telephone=no] 是否自 ...

  10. App IM 之 环信

    文档参考:http://docs.easemob.com/docs.php 开发社区:http://www.imgeek.org 也可以在官网页面上点击客服进行咨询 1. 环信 之 文件导航 2. 环 ...