首页 > 移动平台 > 详细

Android图片轮播

时间:2015-03-26 17:50:51      阅读:304      评论:0      收藏:0      [点我收藏+]

Android在国内这般火,这就试试水。。。不多说,直接上实践结果,根据前辈经验,首先看:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.joyce"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="16" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_program"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

当我们看一个App时,只有先看这个文件才能知道程序是从哪个activity启动!!上面的配置文件已经说明程序是从MainActivity启动,所以接着来看其对应的activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    
    <android.support.v4.view.ViewPager 
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    
    <LinearLayout 
        android:id="@+id/ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dip"
        android:orientation="horizontal">
        
        <ImageView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15dip"
            android:src="@drawable/point"
            android:contentDescription="@string/pic_title"/>
        
        <ImageView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15dip"
            android:src="@drawable/point"
            android:contentDescription="@string/pic_title"/>
        
        <ImageView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15dip"
            android:src="@drawable/point"
            android:contentDescription="@string/pic_title"/>
        
        <ImageView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15dip"
            android:src="@drawable/point"
            android:contentDescription="@string/pic_title"/>
    </LinearLayout>
    	    
</RelativeLayout>

app程序界面的设计基本上就是这样子的写法啦,其实还是蛮简单的,当然也有可能是Demo程序本身就简单。Ok,上关键执行代码:

package com.joyce;

import java.util.List;

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;

public class ViewPagerAdapter extends PagerAdapter {
	
	//界面列表
	private List<View> views;
	
	public ViewPagerAdapter(List<View> views) {
		this.views = views;
	}
	
	/*
	 * 获取界面数
	 * (non-Javadoc)
	 * @see android.support.v4.view.PagerAdapter#getCount()
	 */
	@Override
	public int getCount() {
		return views == null ? 0 : views.size();
	}
	
	/*
	 * 判断是否由对象生成界面
	 * (non-Javadoc)
	 * @see android.support.v4.view.PagerAdapter#isViewFromObject(android.view.View, java.lang.Object)
	 */
	@Override
	public boolean isViewFromObject(View v, Object o) {
		return v == o;
	}
	
	/*
	 * 初始化position位置的界面
	 * (non-Javadoc)
	 * @see android.support.v4.view.PagerAdapter#instantiateItem(android.view.View, int)
	 */
	@Override
	public Object instantiateItem(View view, int position) {
		ViewPager viewpage = (ViewPager) view;
		viewpage.addView(views.get(position), 0);
		return views.get(position);
	}
	
	/*
	 * 销毁position位置的界面
	 * (non-Javadoc)
	 * @see android.support.v4.view.PagerAdapter#destroyItem(android.view.View, int, java.lang.Object)
	 */
	@Override
	public void destroyItem(View view, int position, Object object) {
		((ViewPager)view).removeView(views.get(position));
	}
}

接着看Activity对应的Java文件类

package com.joyce;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;


public class MainActivity extends Activity {
	
	//定义ViewPager对象  
    private ViewPager viewPager; 
    
    //定义ViewPager适配器  
    private ViewPagerAdapter vpAdapter;
    
    //定义一个ArrayList来存放View  
    private List<View> views;
    
    //引导图片资源  
    private static final int[] pics = {R.drawable.pic1,R.drawable.pic2,R.drawable.pic3,R.drawable.pic4};
    
    //底部小点的图片  
    private ImageView[] points;  
  
    //记录当前选中位置  
    private int currentIndex;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        initView();
        initData();
    }
    
    /**
     * 初始化组件
     */
    private void initView(){
    	// 实例化对象
    	views = new ArrayList<View>();
    	viewPager = (ViewPager) this.findViewById(R.id.viewpager);
    	vpAdapter = new ViewPagerAdapter(views);
    }
    
    /**
     * 初始化数据
     */
    private void initData(){
    	LayoutParams mParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    	
    	for (int i = 0; i < pics.length; i++) {
			ImageView iv = new ImageView(this);
			iv.setScaleType(ScaleType.FIT_XY);
			iv.setLayoutParams(mParams);
			iv.setImageResource(pics[i]);
			views.add(iv);
		}
    	
    	// 设置数据
    	viewPager.setAdapter(vpAdapter);
    	
    	viewPager.setOnPageChangeListener(new OnPageChangeListener() {
			
    		/**
    		 * 当新的页面被选中时调用
    		 * (non-Javadoc)
    		 * @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageSelected(int)
    		 */
			@Override
			public void onPageSelected(int position) {
				//设置底部小点选中状态  
		        setCurDot(position); 
			}
			
			/** 
		     * 当当前页面被滑动时调用 
		     */
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				
			}
			
			/** 
		     * 当滑动状态改变时调用 
		     */
			@Override
			public void onPageScrollStateChanged(int arg0) {
				
			}
		});
    	
    	initPoint();
    }
    
    /**
     * 初始化底部小点
     */
    private void initPoint(){
    	LinearLayout linearLayout = (LinearLayout) this.findViewById(R.id.ll);
    	
    	points = new ImageView[pics.length];
    	//循环取得小点图片
    	for (int i = 0; i < pics.length; i++) {
    		//得到一个LinearLayout下面的每一个子元素  
            points[i] = (ImageView) linearLayout.getChildAt(i);  
            //默认都设为灰色  
            points[i].setEnabled(true);  
            //给每个小点设置监听  
            points[i].setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					 int position = (Integer)v.getTag();  
			         setCurView(position);  
			         setCurDot(position);
				}
			});  
            //设置位置tag,方便取出与当前位置对应  
            points[i].setTag(i);
		}
    	
    	//设置当面默认的位置  
        currentIndex = 0;  
        //设置为白色,即选中状态  
        points[currentIndex].setEnabled(false);
    }
    
    /** 
     * 设置当前页面的位置 
     */  
    private void setCurView(int position){  
         if (position < 0 || position >= pics.length) {  
             return;  
         }  
         viewPager.setCurrentItem(position);  
     }  
  
     /** 
     * 设置当前的小点的位置 
     */  
    private void setCurDot(int positon){  
         if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {  
             return;  
         }  
         points[positon].setEnabled(false);  
         points[currentIndex].setEnabled(true);  
  
         currentIndex = positon;  
     }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    /**
     * 当菜单被选择点击时触发事件
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
			case R.id.about_we:
				new Builder(this)
					.setTitle(R.string.about_we)
					.setMessage("我的第一个Android程序,By Joyce!")
					.setPositiveButton("确定", null)
					.show();
				break;
			default:
				// 没有自定义处理的事件,交给父类处理
				return super.onOptionsItemSelected(item);
		}
        //返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
        return true;
    }
}

得了,就说这么多吧,其实编码语言之间思想基本上是类似的,只有发时间,你就会越发精通!

Android图片轮播

原文:http://blog.csdn.net/luo201227/article/details/44650643

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!