android學習筆記15:圖片瀏覽器 – Android移動開發技術文章_手機開發 Android移動開發教學課程

這個圖片瀏覽器可以實現瀏覽程序裡預定義好的圖片數組,且可以動態改變圖片的透明度和查看圖片的局部細節圖,使用瞭imageview這個控件,通過setimagebitmap這個方法來改變圖片,使用setalphe來改變圖片的透明度。

 

 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical"  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<LinearLayout 
    android:orientation="horizontal"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center"> 
<Button android:id="@+id/plus" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="增大透明度" 
    /> 
<Button android:id="@+id/minus" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="降低透明度" 
    /> 
<Button android:id="@+id/next" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="下一張" 
    />        
</LinearLayout> 
<!– 定義顯示圖片整體的ImageView –> 
<ImageView android:id="@+id/image1" 
    android:layout_width="fill_parent" 
    android:layout_height="240px" 
    android:src="@drawable/sunyz_1"  
    android:scaleType="centerCrop"  /> <!– 按比例擴大圖片的size居中顯示,使得圖片長 (寬)等於或大於View的長(寬) –> 
<!– 定義顯示圖片局部細節的ImageView –>  
<ImageView android:id="@+id/image2"  
    android:layout_width="120dp" 
    android:layout_height="120dp" 
    android:background="#0000ff"     
    android:layout_marginTop="10dp"/> 
</LinearLayout> 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
<LinearLayout
 android:orientation="horizontal"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:gravity="center">
<Button android:id="@+id/plus"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="增大透明度"
 />
<Button android:id="@+id/minus"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="降低透明度"
 />
<Button android:id="@+id/next"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="下一張"
 />  
</LinearLayout>
<!– 定義顯示圖片整體的ImageView –>
<ImageView android:id="@+id/image1"
 android:layout_width="fill_parent"
 android:layout_height="240px"
 android:src="@drawable/sunyz_1"
 android:scaleType="centerCrop"  /> <!– 按比例擴大圖片的size居中顯示,使得圖片長 (寬)等於或大於View的長(寬) –>
<!– 定義顯示圖片局部細節的ImageView –> 
<ImageView android:id="@+id/image2"
 android:layout_width="120dp"
 android:layout_height="120dp"
 android:background="#0000ff"  
 android:layout_marginTop="10dp"/>
</LinearLayout>

 

package org.crazyit.imageview; 
 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.widget.Button; 
import android.widget.ImageView; 
  
public class ImageViewTest extends Activity 

    //定義一個訪問圖片的數組  
    int[] images = new int[]{ 
        R.drawable.sunyz_1, 
        R.drawable.sunyz_2,    
        R.drawable.sunyz_3, 
        R.drawable.sunyz_4, 
        R.drawable.sunyz_5, 
         
    }; 
    //定義默認顯示的圖片  
    int currentImg = 2;  
    //定義圖片的初始透明度  
    private int alpha = 255; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        final Button plus = (Button)findViewById(R.id.plus); 
        final Button minus = (Button)findViewById(R.id.minus); 
        final ImageView image1 = (ImageView)findViewById(R.id.image1); 
        final ImageView image2 = (ImageView)findViewById(R.id.image2); 
        final Button next = (Button)findViewById(R.id.next); 
        //定義查看下一張圖片的監聽器  
        next.setOnClickListener(new OnClickListener() 
        { 
            @Override 
            public void onClick(View v) 
            { 
                if (currentImg >= 4) 
                { 
                    currentImg = -1; 
                } 
                BitmapDrawable bitmapDrawable = (BitmapDrawable) image1 
                    .getDrawable(); 
                //如果圖片還未回收,先強制回收該圖片  
                if (!bitmapDrawable.getBitmap().isRecycled()) 
                { 
                    bitmapDrawable.getBitmap().recycle(); 
                } 
                //改變ImageView顯示的圖片  
                image1.setImageBitmap(BitmapFactory.decodeResource(getResources() 
                    , images[++currentImg])); 
            } 
        }); 
        //定義改變圖片透明度的方法  
        OnClickListener listener = new OnClickListener() 
        { 
            @Override 
            public void onClick(View v) 
            { 
                if(v == plus) 
                { 
                    alpha += 20; 
                } 
                if(v == minus) 
                { 
                    alpha -= 20; 
                } 
                if(alpha >= 255) 
                { 
                    alpha = 255; 
                } 
                if(alpha <= 0) 
                { 
                    alpha = 0; 
                } 
                //改變圖片的透明度  
                image1.setAlpha(alpha);              
            } 
        }; 
        //為兩個按鈕添加監聽器  
        plus.setOnClickListener(listener); 
        minus.setOnClickListener(listener); 
        image1.setOnTouchListener(new OnTouchListener() 
        { 
            @Override 
            public boolean onTouch(View view, MotionEvent event) 
            { 
                BitmapDrawable bitmapDrawable = (BitmapDrawable) image1 
                    .getDrawable(); 
                //獲取第一個圖片顯示框中的位圖  
                Bitmap bitmap = bitmapDrawable.getBitmap(); 
                //bitmap圖片實際大小與第一個ImageView的縮放比例  
                double scale = bitmap.getWidth() / 280.0; 
                //獲取需要顯示的圖片的開始點  
                int x = (int) (event.getX() * scale); 
                int y = (int) (event.getY() * scale); 
//              int x = (int) (event.getX() );  
//              int y = (int) (event.getY() );  
                if (x  + 120 > bitmap.getWidth()) 
                { 
                    x = bitmap.getWidth() – 120; 
                } 
                if (y  + 120 > bitmap.getHeight()) 
                { 
                    y = bitmap.getHeight() – 120; 
                } 
                //顯示圖片的指定區域  
                image2.setImageBitmap(Bitmap.createBitmap(bitmap, x, y, 120, 120)); 
                image2.setAlpha(alpha); 
                return false; 
            } 
        }); 
    } 

摘自 hn307165411的專欄

發佈留言