Android實(shí)現(xiàn)幻燈片式圖片瀏覽器
我們來(lái)實(shí)現(xiàn)一個(gè)幻燈片式圖片瀏覽器:
最下面一個(gè)畫(huà)廊視圖,選中畫(huà)廊中的圖片,會(huì)在上面的ImageSwitcher控件中顯示大圖。
效果圖如圖

實(shí)現(xiàn)方法:
在布局文件中添加圖片切換控件ImageSwitcher和畫(huà)廊視圖控件Gallery
res/layout/main.xml:
<?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"
android:id="@+id/layout1"
android:gravity="center_horizontal"
>
<ImageSwitcher
android:id="@+id/imageSwitcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="30px"
android:layout_weight="2"/>
<Gallery
android:id="@+id/gallery1"
android:spacing="5px"
android:layout_weight="1"
android:unselectedAlpha="0.6"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
在res/values目錄中,創(chuàng)建一個(gè)名為attr.xml的文件,在該文件中定義一個(gè)styleable對(duì)象,用于組合多個(gè)屬性。這里只指定了一個(gè)系統(tǒng)自帶的android:galleryItemBackground屬性,用于設(shè)置各選項(xiàng)的背景。具體代碼如下:
res/values/attr.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Gallery">
<attr name="android:galleryItemBackground"/>
</declare-styleable>
</resources>
MainActivity:
package com.example.test;
import android.app.Activity;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher.ViewFactory;
public class MainActivity extends Activity {
//定義并初始化保存圖片id的數(shù)組
private int[] imageId=new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,
R.drawable.img5,R.drawable.img6,R.drawable.img7,R.drawable.img8,R.drawable.img9};
//聲明一個(gè)圖像切換器對(duì)象
private ImageSwitcher imageSwitcher;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Gallery gallery=(Gallery)findViewById(R.id.gallery1);//獲取gallery組件
imageSwitcher=(ImageSwitcher)findViewById(R.id.imageSwitcher);//獲取圖像切換器
//設(shè)置動(dòng)畫(huà)效果
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));//設(shè)置淡入動(dòng)畫(huà)
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));//設(shè)置淡出動(dòng)畫(huà)
imageSwitcher.setFactory(new ViewFactory(){
@Override
public View makeView() {
ImageView imageView=new ImageView(MainActivity.this);//實(shí)例化一個(gè)imageView類的對(duì)象
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);//設(shè)置保持縱橫比居中縮放圖像
imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
return imageView;//返回imageView對(duì)象
}
});
BaseAdapter adapter=new BaseAdapter(){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;//聲明ImageView的對(duì)象
if(convertView==null){
imageView=new ImageView(MainActivity.this);//實(shí)例化ImageView的對(duì)象
imageView.setScaleType(ImageView.ScaleType.FIT_XY);//設(shè)置縮放方式
imageView.setLayoutParams(new Gallery.LayoutParams(180,135));
//設(shè)置gallery每一項(xiàng)圖片的背景資源(使用的是attr.xml的自定義樣式)
TypedArray typedArray=obtainStyledAttributes(R.styleable.Gallery);
imageView.setBackgroundResource(typedArray.getResourceId(
R.styleable.Gallery_android_galleryItemBackground, 0));
imageView.setPadding(5, 0, 5, 0);//設(shè)置imageView的內(nèi)邊距
}else{
imageView=(ImageView)convertView;
}
imageView.setImageResource(imageId[position]);//為imageView設(shè)置要顯示的圖片
return imageView;//返回ImageView
}
//功能:獲得當(dāng)前選項(xiàng)的id
@Override
public long getItemId(int position) {
return position;
}
//功能:獲得當(dāng)前選項(xiàng)
@Override
public Object getItem(int position) {
return position;
}
//獲得數(shù)量
@Override
public int getCount() {
return imageId.length;
}
};
gallery.setAdapter(adapter);//將適配器與Gallery關(guān)聯(lián)
gallery.setSelection(imageId.length/2);//選中中間的圖片
gallery.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View v,
int position, long id) {
imageSwitcher.setImageResource(imageId[position]);//顯示選中的圖片
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
}
這樣單擊某張圖片,可以選中該圖片,并且讓其居中顯示,也可以用手指拖動(dòng)圖片來(lái)移動(dòng)圖片,并且讓選中的圖片在上方顯示,如圖是切換瞬間的效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android Studio gradle配置packagingOptions打包so庫(kù)重復(fù)
這篇文章主要為大家介紹了Android Studio gradle配置packagingOptions打包so庫(kù)重復(fù)問(wèn)題的解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android中ScrollView 滑到頭部或尾部可伸縮放大效果
最近做項(xiàng)目遇到這樣的需求S當(dāng)crollView 滑動(dòng)到頂部,不能在滑動(dòng)的時(shí)候,圖片可以下拉放大,松開(kāi)又恢復(fù),滑到底部沒(méi)有內(nèi)容的時(shí)候,也有伸縮效果,下面通過(guò)實(shí)例代碼給大家介紹Android ScrollView 滑到頭部或尾部可伸縮放大功能,一起學(xué)習(xí)吧2017-03-03
Flutter自定義下拉刷新時(shí)的loading樣式的方法詳解
Flutter中的下拉刷新,我們通常RefreshIndicator,可以通過(guò)color或strokeWidth設(shè)置下拉刷新的顏色粗細(xì)等樣式,但如果要自定義自己的widget,RefreshIndicator并沒(méi)有暴露出對(duì)應(yīng)的屬性,那如何修改呢,文中給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
android studio 3.6.0 綁定視圖新特性的方法
這篇文章主要介紹了android studio 3.6.0 綁定視圖新特性的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
MaterialApp?Flutter?應(yīng)用全局配置與主題管理詳解
這篇文章主要為大家介紹了MaterialApp?Flutter?應(yīng)用全局配置與主題管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
android實(shí)現(xiàn)注冊(cè)頁(yè)面開(kāi)發(fā)
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)注冊(cè)頁(yè)面開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04

