如果想要讓你的圖片能夠自由的放大, 旋轉或者改變透明度,
應該怎麼做?
首先設定好將所需的元件排好
接著在初始化這些元件
然後為這些元件設定事件,
就是當按下去滑動的時候,
而第二個方法跟第三個方法是按下去的瞬間跟放開的瞬間才會觸發。
然後我們首先寫入當要滑動透明度的時候的方法,
你也可以只乘以alpha就好了。
再來寫入變化大小的方法,
這邊說明一下, 一開始預設的大小值是0, 只要出現比目前大的大小,
我就用目前的大小扣掉預設的大小, 如果是負的表示使用者是想縮小,
如果是正的表示使用者想放大, 而由於我們的範圍是0~100,
但是我們的scale傳進來的數字也是0~100,
但是設定大小的參數卻是以倍數來計算, 因此我們除以100, 就可以把範圍落在0~2之間,
代表著假設1 就是保持原本的大小, 但是如果大於1 就是放大 ,
小於1 就是縮小。
最後剩下旋轉的方法,
程式碼
http://uploadingit.com/file/28etjqdvswdaasb8/ImageViewDemo.zip
應該怎麼做?
首先設定好將所需的元件排好
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/imageView"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Set Alpha"
/>
<SeekBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/alpha"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Set Scale"
/>
<SeekBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/scale"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Set Rotation"
/>
<SeekBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/rotation"
/>
</LinearLayout>
接著在初始化這些元件
public void setComponent(){
alpha = (SeekBar)findViewById(R.id.alpha);
rotation = (SeekBar)findViewById(R.id.rotation);
scale = (SeekBar)findViewById(R.id.scale);
imageView = (ImageView)findViewById(R.id.imageView);
alpha.setProgress(100);
}
然後為這些元件設定事件,
public void setEventListener(){
alpha.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
});
scale.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
});
rotation.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
});
}
由於SeekBar必須覆寫三個方法, 但是其實我們只有用到第一個方法,就是當按下去滑動的時候,
而第二個方法跟第三個方法是按下去的瞬間跟放開的瞬間才會觸發。
然後我們首先寫入當要滑動透明度的時候的方法,
public void setAlpha(int alpha){
imageView.setAlpha(alpha*2);
}
你沒看錯, 只有一行而已, 為什麼要乘以2, 我怕圖片太透明會看不到,你也可以只乘以alpha就好了。
再來寫入變化大小的方法,
public void setScale(int scale){
defaultScale = scale - defaultScale;
float sizeWidth = (1+(float)defaultScale/100);
float sizeHeight = (1+(float)defaultScale/100);
defaultScale = scale;
matrix.postScale(sizeWidth, sizeHeight);
Bitmap bmp = Bitmap.createBitmap(bitmap,
0, 0, oriBitmapWidth ,oriBitmapHeight , matrix, true);
imageView.setImageBitmap(bmp);
}
利用Matrix物件, 可以控制圖片的放大縮小跟旋轉。這邊說明一下, 一開始預設的大小值是0, 只要出現比目前大的大小,
我就用目前的大小扣掉預設的大小, 如果是負的表示使用者是想縮小,
如果是正的表示使用者想放大, 而由於我們的範圍是0~100,
但是我們的scale傳進來的數字也是0~100,
但是設定大小的參數卻是以倍數來計算, 因此我們除以100, 就可以把範圍落在0~2之間,
代表著假設1 就是保持原本的大小, 但是如果大於1 就是放大 ,
小於1 就是縮小。
最後剩下旋轉的方法,
public void setRotation(int angle){
if(angle>defaultAngle){
matrix.postRotate(defaultAngle+angle*3.6f);
}
else{
matrix.postRotate(defaultAngle-angle*3.6f);
}
defaultAngle = angle*3.6f;
Bitmap bmp = Bitmap.createBitmap(bitmap,
0, 0, oriBitmapWidth ,oriBitmapHeight , matrix, true);
imageView.setImageBitmap(bmp);
}
預設的角度是0度, 當旋轉角度比預設角度大表示使用者想向右旋轉, 反之就是想向左旋轉。程式碼
http://uploadingit.com/file/28etjqdvswdaasb8/ImageViewDemo.zip