android之查看圖片的程式 ImageSwitcher Gallery的配合應用—版本2

來源:互聯網
上載者:User

其實還是一樣的,只不過這裡添加了這麼以下幾個功能:

第一:下方圖片的自適應長寬(在保證長寬比例的情況下哦)

第二:觸摸大圖同樣可以進行圖片切換(沒有機器,沒法測試,但是基本的思路還是正確的)

代碼:

activity代碼:

package cn.com.chenzheng_java;</p><p>import java.text.DecimalFormat;</p><p>import android.app.Activity;<br />import android.content.Context;<br />import android.content.res.Resources;<br />import android.graphics.Bitmap;<br />import android.graphics.BitmapFactory;<br />import android.os.Bundle;<br />import android.util.Log;<br />import android.view.MotionEvent;<br />import android.view.View;<br />import android.view.ViewGroup;<br />import android.view.Window;<br />import android.view.View.OnTouchListener;<br />import android.view.animation.AnimationUtils;<br />import android.widget.AdapterView;<br />import android.widget.BaseAdapter;<br />import android.widget.Gallery;<br />import android.widget.ImageSwitcher;<br />import android.widget.ImageView;<br />import android.widget.Toast;<br />import android.widget.AdapterView.OnItemSelectedListener;<br />import android.widget.Gallery.LayoutParams;<br />import android.widget.ImageView.ScaleType;<br />import android.widget.ViewSwitcher.ViewFactory;<br />/**<br /> * @description 對圖片的一個小小展示<br /> * @author chenzheng_java<br /> * @since 2011/3/17<br /> *<br /> */<br />public class GalleryActivity extends Activity implements OnItemSelectedListener ,OnTouchListener{</p><p>int[] imagesId = new int[] { R.drawable.a1, R.drawable.a2, R.drawable.a3,<br />R.drawable.a4</p><p>};<br />int index = 0;<br />ImageSwitcher imageSwitcher;<br />int maxImageWidth = 70;<br />int maxImageHeight = 100;</p><p>@Override<br />protected void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />/**<br /> * 設定視窗無標題列,一定要在setContentView前進行設定哦<br /> */<br />requestWindowFeature(Window.FEATURE_NO_TITLE);<br />setContentView(R.layout.gallery);</p><p>Gallery gallery = (Gallery) findViewById(R.id.gallery1);<br />gallery.setOnItemSelectedListener(this);</p><p>imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher);<br />imageSwitcher.setVisibility(View.VISIBLE);</p><p>/***<br /> * setInAnimation可以設定淡入動畫<br /> * setOutAnimation可以設定淡齣動畫<br /> */<br />imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(<br />getApplicationContext(), android.R.anim.fade_in));<br />imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(<br />getApplicationContext(), android.R.anim.fade_out));</p><p>imageSwitcher.setFactory(new ViewFactory() {<br />/**<br /> * 建立一個新的圖片放置到ImageSwitcher上,可以使用其設定背景哦。<br /> * 一般只會在建立時調用一次。相當於為我們建立一個進行動畫效果時的一個背景圖。<br /> * 此方法亦可以通過setView替代<br /> */<br />@Override<br />public View makeView() {<br />ImageView imageView = new ImageView(GalleryActivity.this);<br />// 設定截模數式<br />imageView.setScaleType(ScaleType.CENTER_INSIDE);<br />imageView.setBackgroundResource(R.drawable.ground);<br />Toast.makeText(getApplicationContext(), "執行了一次",<br />Toast.LENGTH_SHORT).show();<br />return imageView;<br />}<br />});</p><p>gallery.setVisibility(View.VISIBLE);<br />gallery.setAdapter(new ImageAdapter(this));</p><p>}</p><p>class ImageAdapter extends BaseAdapter {<br />private Context context2;</p><p>public ImageAdapter(Context context) {<br />context2 = context;<br />}</p><p>@Override<br />public int getCount() {<br />return imagesId.length;<br />}</p><p>@Override<br />public Object getItem(int position) {<br />return imagesId[position];<br />}</p><p>@Override<br />public long getItemId(int position) {<br />return position;<br />}<br />/***<br /> * 該方法的實現稍微複雜一些,主要思想就是,要對圖片的大小進行自動剪裁,讓其正好寬或者長頂到允許的最大值<br /> * 這裡主要用到了BitmapFactory Bitmap 用於圖片擷取和處理<br /> * DecaimalFormat 用於對double資料進行格式規劃(這裡是只允許小數點後兩位)<br /> */<br />@Override<br />public View getView(int position, View convertView, ViewGroup parent) {<br />index = position;<br />ImageView image = new ImageView(context2);<br />Resources resources = context2.getResources();<br />// 載入圖片為Bitmap位元影像<br />Bitmap bitmap = BitmapFactory.decodeResource(resources, imagesId[position]);<br />Log.i("是否可以decode這張圖片", (bitmap!=null)+"");</p><p>// 圖片的原始大小<br />int bitMapWidth = bitmap.getWidth();<br />int bitMapHeight = bitmap.getHeight();<br />Log.i("bitMapWidth", bitMapWidth+"");<br />Log.i("bitMapHeight", bitMapHeight+"");</p><p>// 縮小或者放大的倍數關係<br />double scale;<br />double widthScale = (maxImageWidth*100)/(bitMapWidth*100.0);//這裡乘以100然後除以100.0的目的是為了讓其返回double類型<br />double heightScale = (maxImageHeight*100)/(bitMapHeight*100.0);</p><p>// 規劃獲得的格式(小數點後兩位)<br />DecimalFormat decimalFormat = new DecimalFormat("#.00");<br />widthScale = Double.valueOf(decimalFormat.format(widthScale));<br />heightScale = Double.valueOf(decimalFormat.format(heightScale));</p><p>Log.i("widthScale", widthScale+"");<br />Log.i("heightScale", heightScale+"");</p><p>if(widthScale>= heightScale){<br />scale = widthScale;<br />}<br />else{<br />scale = heightScale;<br />}</p><p>Log.i("scale", scale+"");</p><p>// 根據原圖片產生一個縮放後的圖片<br />Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, (int)(bitMapWidth*scale), (int)(bitMapHeight*scale), true);<br />// 將圖片綁定到ImageView<br />image.setImageBitmap(bitmap2);</p><p>/**<br /> * setScaleType()可以設定當圖片大小和容器大小不匹配時的剪輯模式.<br /> * ScaleType.CENTER_INSIDE的意思是,按圖片的原比例縮小或者擴大,直到長或者寬中的任何一個頂到容器為止<br /> * 因為在上面我們已經重建了一個圖片放在gallery上,大小已經符合要求了,所以這裡就不需要再通過<br /> * setScaleType進行剪裁了。有些人可能覺得筆者腦子有病,有簡單的不用,非要用那麼複雜的,這裡呢,其實只是<br /> * 給大家的一個使用範例,我們通過bitmap可不僅僅是縮放圖片哦,還可以傾斜、移動等等……<br /> */<br />// image.setScaleType(ScaleType.CENTER_INSIDE);<br />image.setAdjustViewBounds(true);// 自適應邊框處理<br />image.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));<br />return image;<br />}</p><p>}<br />/**<br /> * 當gallery的映像發生變化時,同步ImageSwitcher的變化<br /> */<br />@Override<br />public void onItemSelected(AdapterView<?> parent, View view, int position,<br />long id) {<br />imageSwitcher.setImageResource(imagesId[position]);</p><p>}</p><p>@Override<br />public void onNothingSelected(AdapterView<?> parent) {</p><p>}<br />int i = 0 ;<br />/***<br /> * 螢幕被觸摸時提供的方法,這裡我們通過它來實現拖動大圖片,也會自動切換圖片o<br /> */<br />@Override<br />public boolean onTouch(View v, MotionEvent event) {<br />Log.i("是否正在觸摸", "yes");<br />int actionName = event.getAction();<br />float []position = null;</p><p>//被按下時<br />if(actionName==MotionEvent.ACTION_DOWN){<br />i = 0;<br />}<br />// 被按著拖動時<br />if(actionName == MotionEvent.ACTION_MOVE)<br />{<br />position[i] = event.getX();<br />++i;</p><p>}<br />if(actionName == MotionEvent.ACTION_UP)<br />{<br />if(position[position.length]>position[position.length-1]){</p><p>if((index+1)>imagesId.length){<br />imageSwitcher.setImageResource(imagesId[index]);<br />}<br />else{<br />imageSwitcher.setImageResource(imagesId[index+1]);<br />}</p><p>}<br />else{<br />if((index-1)<0){<br />imageSwitcher.setImageResource(imagesId[0]);<br />}<br />else{<br />imageSwitcher.setImageResource(imagesId[index-1]);<br />}</p><p>}<br />}<br />return true;<br />}</p><p>}<br />

gallery.xml

<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout<br /> xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> android:orientation="vertical"<br /> android:gravity="center_horizontal"<br /> ></p><p> <ImageSwitcher<br /> android:id="@+id/imageSwitcher"<br /> android:layout_height="350dp"<br /> android:layout_width="fill_parent"<br /> ></ImageSwitcher></p><p> <Gallery android:id="@+id/gallery1"<br /> android:gravity="center"<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"></Gallery><br /></LinearLayout><br />

-----------------------------------------------------------

有問題的大家一起交流!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.