androidMatrix之一(图片二维转动)

android最酷的就是它的图片切换效果,而其核心是通过Matrix类来实现的,作了个简单的小例子,可以通过点击两个按钮实现图片的左右转动,奉献以下程序代码;
页面布局matrixlayout.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content">

<TextView android:id="@+id/myTextView1" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:text="hello xiaohua">
</TextView>
<Button android:id="@+id/myButton1" android:text="left"
android:layout_width="wrap_content" android:layout_height="wrap_content">
</Button>
<Button android:id="@+id/myButton2" android:text="right"
android:layout_width="wrap_content" android:layout_height="wrap_content">
</Button>
<ImageView android:id="@+id/myImageView1"
android:layout_width="wrap_content" android:layout_height="wrap_content">
</ImageView>
</LinearLayout>

主程序代码MatrixTest.java
package test.shi;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.widget.*;
import android.util.Log;
import android.view.*;

public class MatrixTest extends Activity {

private Button myButton1;
private Button myButton2;
private TextView myTextView1;
private ImageView myImageView1;
int ScaleTimes=0;
int ScaleAngles=0;


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.matrixlayout);

try{
//
初始化几个控件
myButton1=(Button)findViewById(R.id.myButton1);
myButton2=(Button)findViewById(R.id.myButton2);
myTextView1=(TextView)findViewById(R.id.myTextView1);
myImageView1=(ImageView)findViewById(R.id.myImageView1);
ScaleTimes=1;
ScaleAngles=1;

//
生成位图
final Bitmap mybitmap=BitmapFactory.decodeResource(getResources(), R.drawable.icon);
myImageView1.setImageBitmap(mybitmap);

//
图片原始大小
final int widOrg=mybitmap.getWidth();
final int heightOrg=mybitmap.getHeight();

myButton1.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ScaleAngles--;
if(ScaleAngles<=-5)
ScaleAngles=-5;

int newWid=ScaleTimes*widOrg;
int newHeight=ScaleTimes*heightOrg;

float scaleWid=((float)newWid)/ScaleTimes;
float scaleHeight=((float)newHeight)/ScaleTimes;

//
每次都转5度,设定的最大左偏转25度,右偏转25
Matrix matrix=new Matrix();
matrix.postScale(scaleWid,scaleHeight);
matrix.setRotate(5*ScaleAngles);

//
产生暂存的Bitmapmatrix参数是关键
Bitmap newbitmap=Bitmap.createBitmap(mybitmap, 0,0, widOrg,
heightOrg,matrix,true);

BitmapDrawable bitmapDrawable=new BitmapDrawable(newbitmap);

myImageView1.setImageDrawable(bitmapDrawable);
myTextView1.setText(Integer.toString(5*ScaleAngles));

}

});

myButton2.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ScaleAngles++;
if(ScaleAngles>=5)
ScaleAngles=5;

int newWid=ScaleTimes*widOrg;
int newHeight=ScaleTimes*heightOrg;

float scaleWid=((float)newWid)/ScaleTimes;
float scaleHeight=((float)newHeight)/ScaleTimes;

Matrix matrix=new Matrix();
matrix.postScale(scaleWid,scaleHeight);

//postRotate
setRotate在这里效果是一样的。
//matrix.postRotate(5*ScaleAngles);
matrix.setRotate(5*ScaleAngles);

Bitmap newbitmap=Bitmap.createBitmap(mybitmap, 0,0, widOrg,
heightOrg,matrix,true);

BitmapDrawable bitmapDrawable=new BitmapDrawable(newbitmap);

myImageView1.setImageDrawable(bitmapDrawable);
myTextView1.setText(Integer.toString(5*ScaleAngles));

}

});

}
catch(Exception ex)
{
Log.d("shi",ex.toString());
ex.printStackTrace();

}
}

}

更多相关文章

  1. Android(安卓)matrix 控制图片的旋转、缩放、移动
  2. android拍照与读取相册
  3. Android(安卓)报错:Caused by: android.os.FileUriExposedExcepti
  4. android解决坚屏拍照和保存图片旋转90度的问题,并兼容4.0
  5. [Android]在App中使用相机
  6. android WebView 图片缩放功能小结
  7. Android(安卓)主流图片库Picasso Glide Fresco对比分析
  8. android背景选择器selector用法汇总
  9. ImageView的scaletype属性

随机推荐

  1. android 中对xml 进行解析
  2. Android 平台如何获取程序的版本
  3. Android实现自动定位城市并获取天气信息
  4. Android SDK Tools 19出了
  5. Android之Widget
  6. Android文件读写包含SDCard
  7. Android Notes 04 - Intents and Intent
  8. android 禁止输入特殊字符
  9. android > 广播监听电话状态
  10. android闹钟(三):实现时钟功能