开发者社区> 古镇月影> 正文

android 自定义动画按钮

简介: 引用:http://blog.csdn.net/GEOLO/article/details/6221350       [c-sharp] view plaincopyprint? package com.
+关注继续查看

引用:http://blog.csdn.net/GEOLO/article/details/6221350

 

 

 

  1. package com.geolo.android;  
  2. import android.content.Context;  
  3. import android.graphics.Bitmap;  
  4. import android.graphics.Bitmap.Config;  
  5. import android.graphics.BitmapFactory;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Color;  
  8. import android.graphics.Matrix;  
  9. import android.graphics.Paint;  
  10. import android.graphics.PorterDuff.Mode;  
  11. import android.graphics.PorterDuffXfermode;  
  12. import android.graphics.Rect;  
  13. import android.graphics.RectF;  
  14. import android.util.AttributeSet;  
  15. import android.view.MotionEvent;  
  16. import android.widget.ImageView;  
  17. public class MyButtonView extends ImageView{  
  18.     private Bitmap animBitmap = null;  
  19.     private Bitmap buttonBitmap = null;  
  20.     private int moveX = 0;  
  21.     private boolean isPress = false;  
  22.     private int timeID = 0;  
  23.     private Integer myButtonID[] = new Integer[]{  
  24.             R.drawable.mybutton01,  
  25.             R.drawable.mybutton02,  
  26.             R.drawable.mybutton03,  
  27.             R.drawable.mybutton04,  
  28.             R.drawable.mybutton05,  
  29.             R.drawable.mybutton06,  
  30.             R.drawable.mybutton07,  
  31.             R.drawable.mybutton08,  
  32.             R.drawable.mybutton09,  
  33.             R.drawable.mybutton10,  
  34.             R.drawable.mybutton11,  
  35.             R.drawable.mybutton12,  
  36.             R.drawable.mybutton13,  
  37.             R.drawable.mybutton14,  
  38.             R.drawable.mybutton15,  
  39.             R.drawable.mybutton16,  
  40.             R.drawable.mybutton17,  
  41.             R.drawable.mybutton18,  
  42.             R.drawable.mybutton19,  
  43.             R.drawable.mybutton20  
  44.     };  
  45.     public MyButtonView(Context context) {  
  46.         this(context, null);  
  47.     }  
  48.     public MyButtonView(Context context, AttributeSet attrs) {  
  49.         super(context,attrs);  
  50.         animBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.myutil);  
  51.         buttonBitmap = BitmapFactory.decodeResource(getResources(),myButtonID[0]);  
  52.         new Thread(new MyThread()).start();  
  53.     }  
  54.   
  55.     @Override  
  56.     protected void onDraw(Canvas canvas) {  
  57.         super.onDraw(canvas);  
  58.         drawImage(canvas,0,0,animBitmap,moveX,0,200,100);  
  59.         canvas.drawBitmap(buttonBitmap,20,15, null);  
  60.     }  
  61.     @Override  
  62.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  63.         setMeasuredDimension(131, 53);  
  64.     }  
  65.   
  66.     private void drawImage(Canvas canvas , int x, int y,Bitmap oldBitmap , int sx,int sy,int width ,int height){  
  67.         Rect rect_x = new Rect();  
  68.         rect_x.left = sx;  
  69.         rect_x.right = sx + width;  
  70.         rect_x.top = sy;  
  71.         rect_x.bottom = sy + height;  
  72.         Rect rect_y = new Rect();  
  73.         rect_y.left = x;  
  74.         rect_y.right = x + width;  
  75.         rect_y.top = y;  
  76.         rect_y.bottom = y + height;  
  77.         //按指定的裁剪矩形来绘制图片  
  78.         //分别是屏幕上的矩形和图片上要绘制的矩形裁剪  
  79.         Bitmap output = Bitmap.createBitmap(oldBitmap.getWidth(),  
  80.                 oldBitmap.getHeight(), Config.ARGB_8888);  
  81.         Canvas canvas2 = new Canvas(output);  
  82.         Paint paint = new Paint();  
  83.         paint.setAntiAlias(true);  
  84.         //canvas.drawARGB(0, 0, 0, 0);  
  85.         //paint.setColor(0xff424242);  
  86.         //paint.setAlpha(140);  
  87.         //canvas2.drawRoundRect(new RectF(2,4,130,50), 10.0f, 10.0f, paint);  
  88.         canvas2.drawRoundRect(new RectF(1,0,130,50), 15.0f, 15.0f, paint);  
  89.         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  
  90.         canvas2.drawBitmap(oldBitmap, rect_x, rect_y, paint);  
  91.         canvas.drawBitmap(output, 0 , 0, null);  
  92.         rect_x = null;  
  93.         rect_y = null;  
  94.     }  
  95.   
  96.     @Override  
  97.     public boolean dispatchTouchEvent(MotionEvent event) {  
  98.         /*  if(isReleased){ 
  99.             touchPoint = new Point(); 
  100.             touchPoint.x = (int)event.getX(); 
  101.             touchPoint.y = (int)event.getY();    
  102.         }*/  
  103.         switch (event.getAction()) {  
  104.         case MotionEvent.ACTION_DOWN:    
  105.             isPress = true;  
  106.             break;  
  107.         case MotionEvent.ACTION_UP:  
  108.             isPress = false;  
  109.             break;  
  110.         default:  
  111.             break;  
  112.         }  
  113.         return true;  
  114.     }  
  115.     private class MyThread implements Runnable{  
  116.         @Override  
  117.         public void run() {  
  118.             while(!Thread.currentThread().isInterrupted()){  
  119.                 try {  
  120.                     moveX++;  
  121.                     if(moveX > 100){  
  122.                         moveX = 0;  
  123.                     }  
  124.                     if(isPress){  
  125.                         timeID ++ ;  
  126.                         if(timeID <20){  
  127.                             buttonBitmap = BitmapFactory.decodeResource(getResources(), myButtonID[timeID]);  
  128.                         }else{  
  129.                             timeID =0 ;  
  130.                         }  
  131.                     }  
  132.                     Thread.sleep(50);  
  133.                 } catch (Exception e) {  
  134.                     Thread.currentThread().interrupt();  
  135.                 }  
  136.                 postInvalidate();  
  137.             }  
  138.         }  
  139.     }  
  140. }  

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
安卓一行代码实现避免按钮重复点击(AOP)java和kotlin都能使用
安卓一行代码实现避免按钮重复点击(AOP)java和kotlin都能使用
336 0
Android viewpage 设定上一页下一页按钮
Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位于v4包中。低版本使用需要导入v4包,但是现在我们开发的APP一般不再兼容3.0及以下的系统版本,另外现在大多数使用Android studio进行开发,默认导入v7包,v7包含了v4,所以不用导包,越来越方便了。
143 0
Android | 使用 AspectJ 限制按钮快速点击
Android | 使用 AspectJ 限制按钮快速点击
81 0
Android AlertDialog修改标题、内容、按钮的字体大小和字体颜色
Android AlertDialog修改标题、内容、按钮的字体大小和字体颜色
516 0
Android:解决“按钮 Button设置文字String 含字母时 字母默认自动转为大写字符串” 问题
Android:解决“按钮 Button设置文字String 含字母时 字母默认自动转为大写字符串” 问题
185 0
Android开发案例 点击按钮出现 简易的消息提示框
Android开发案例 点击按钮出现 简易的消息提示框
151 0
3种方法实现Android按钮的点击事件,建议收藏!
3种方法实现Android按钮的点击事件,建议收藏!
413 0
Android:OnTouchListener的简单使用,按钮点击放大与缩小
Android:OnTouchListener的简单使用,按钮点击放大与缩小
199 0
简单实现安卓圆形按钮及(圆形)波纹效果
简单实现安卓圆形按钮及(圆形)波纹效果
108 0
Android Studio 按钮Button操作
1. 功能 按钮太常见了,登录按钮,注册按钮,提交按钮,取消按钮。几乎所有程序中都会使用按钮。 2. 显示按钮
98 0
+关注
古镇月影
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
蚂蚁聚宝Android秒级编译——Freeline
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像