博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 图片旋转
阅读量:6549 次
发布时间:2019-06-24

本文共 3613 字,大约阅读时间需要 12 分钟。

 

android图片旋转是老话题了,但如何简单迅速无BUG的解决它是需要想一想的。

首先回顾一下android 图片旋转提供的API有哪些

1.Matrix

2.Animation

说白了 Animation的核心也是Matrix。 而且Animation真是扩展性不强也不好用,用过的应该都知道。

那我们开始走Matrix路线吧。下面是游戏中用到的箭头选择并动画在原地来回偏移。

核心代码如下

package com.laahaa.view.extension; import com.laahaa.R; import com.laahaa.config.ExtensionLayoutConfig; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.view.Gravity; import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; import android.widget.ImageView; /**  *  * 

class name:中间箭头

*

class instruction:

* @author Mercury Create in 2012-2-7 */ public class CenterArrow extends ImageView{
FrameLayout.LayoutParams lp; private Bitmap bitmap; private Matrix matrix = new Matrix(); public CenterArrow(Context context) {
super(context); lp=new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,Gravity.CENTER); } /** * 线程每次间隔时间调用 * @param dir */ public void onTick(int dir) {
switch (dir) {
case 0: if(lp.bottomMargin==(ExtensionLayoutConfig.CenterArrowWidth+ExtensionLayoutConfig.CenterCircleWidth)) lp.bottomMargin+=ExtensionLayoutConfig.ArrowOffset; else lp.bottomMargin-=ExtensionLayoutConfig.ArrowOffset; break; case 1: if(lp.leftMargin==(ExtensionLayoutConfig.CenterArrowWidth+ExtensionLayoutConfig.CenterCircleWidth)) lp.leftMargin+=ExtensionLayoutConfig.ArrowOffset; else lp.leftMargin-=ExtensionLayoutConfig.ArrowOffset; break; case 2: if(lp.bottomMargin==-(ExtensionLayoutConfig.CenterArrowWidth+ExtensionLayoutConfig.CenterCircleWidth)) lp.bottomMargin-=ExtensionLayoutConfig.ArrowOffset; else lp.bottomMargin+=ExtensionLayoutConfig.ArrowOffset; break; case 3: if(lp.leftMargin==-(ExtensionLayoutConfig.CenterArrowWidth+ExtensionLayoutConfig.CenterCircleWidth)) lp.leftMargin-=ExtensionLayoutConfig.ArrowOffset; else lp.leftMargin+=ExtensionLayoutConfig.ArrowOffset; break; } this.setLayoutParams(lp); this.setImageBitmap(bitmap); } public void setRotate(int dir) {
int degrees=0; switch (dir) {
case 0: degrees=90; lp.leftMargin=0; lp.rightMargin=0; lp.bottomMargin=ExtensionLayoutConfig.CenterArrowWidth+ExtensionLayoutConfig.CenterCircleWidth; lp.topMargin=0; break; case 1: degrees=0; lp.leftMargin=ExtensionLayoutConfig.CenterArrowWidth+ExtensionLayoutConfig.CenterCircleWidth; lp.rightMargin=0; lp.bottomMargin=0; lp.topMargin=0; break; case 2: degrees=270; lp.leftMargin=0; lp.rightMargin=0; lp.bottomMargin=-(ExtensionLayoutConfig.CenterArrowWidth+ExtensionLayoutConfig.CenterCircleWidth); lp.topMargin=0; break; case 3: degrees=180; lp.leftMargin=-(ExtensionLayoutConfig.CenterArrowWidth+ExtensionLayoutConfig.CenterCircleWidth); lp.rightMargin=0; lp.bottomMargin=0; lp.topMargin=0; break; } bitmap=((BitmapDrawable) getResources().getDrawable(R.drawable.arrow)).getBitmap(); this.setLayoutParams(lp); //设置图像的旋转角度 matrix.setRotate(degrees); //旋转图像,并生成新的Bitmap对像 bitmap=Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); //重新在ImageView组件中显示旋转后的图像 this.setImageBitmap(bitmap); } }

转载地址:http://hfyco.baihongyu.com/

你可能感兴趣的文章
特征变换(7)总结
查看>>
网络工程师之路怎么走?
查看>>
go语言unix域套接字发送udp报文
查看>>
2.并发和并行
查看>>
OpenGL学习(二)用户与交互
查看>>
神奇的代码-常见错误代码注意点
查看>>
[直播一揽子]编码构思和套路
查看>>
[直播一揽子]x264参数的解释
查看>>
iOS学习之Objective-C 2.0 运行时系统编程
查看>>
Exchange2007-Exchange2010升级-06 数据库高可用组的创建
查看>>
phpHiveAdmin是如何通过Hive/Hadoop工作的
查看>>
双向链表内结点的删除(4)
查看>>
项目总结
查看>>
JSON字符串转成对象
查看>>
SaltStack 中ZMQ升级
查看>>
exchange 2013 提示“HTTP 500内部服务器错误”
查看>>
Linux运维学习笔记之一:运维的原则和学习方法
查看>>
怎样使用原型设计中的组件样式功能
查看>>
python threading
查看>>
谷安天下2013年6月CISA考前辅导 第一季
查看>>