android二维图形翻转效果

来源:互联网 发布:淘宝怎么设置虚拟发货 编辑:程序博客网 时间:2024/06/06 13:21

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();

}
}

}

 

原创粉丝点击