viewSwitcher模拟手机应用程序主界面滚动

mac2024-03-30  27

位置:res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ViewSwitcher android:id="@+id/view_switcher" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:id="@+id/button_prev" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:onClick="prev" android:text="prev" /> <Button android:id="@+id/button_next" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:onClick="next" android:text="next" /> </RelativeLayout>

位置:res/layout/labelicon.xml

介绍:下图GridView每个adpter组成,即模拟应用程序的图标和名称

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent"> <ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center"/> </LinearLayout>

位置:res/layout/slidelistview.xml

介绍:GridView模拟桌面应用程序排列

<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalSpacing="1pt" android:verticalSpacing="1pt" android:numColumns="4" android:gravity="center" > </GridView>

位置:res/anim/slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime" /> </set>

位置:res/anim/slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 设置从右边拖进来的动画 --> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime" /> </set>

位置:res/anim/slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="@android:integer/config_mediumAnimTime" /> </set>

位置:res/anim/slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 从左边拖出去的动画 --> <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="@android:integer/config_mediumAnimTime" /> </set>

位置:MainActivity

package com.example.studyandroid004; import android.content.Context; import android.graphics.drawable.Drawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import android.widget.ViewSwitcher; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { // 每屏显示的应用程序的个数 public static final int NUMBER_PER_SCREEN = 12; public static class DataItem{ // 名称 public String dataName; // 图标 public Drawable drawable; } // 所有应用程序的集合 private ArrayList<DataItem> items = new ArrayList<DataItem>(); // 记录当前正在显示第几屏幕的程序 private int screenNo = -1; // 程序所占的总屏数 private int screenCount; ViewSwitcher switcher; LayoutInflater inflater; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); inflater = LayoutInflater.from(this); // 创建一个包含40个元素的List集合 for(int i=0; i<40; i++){ String lable = ""+i; Drawable drawable = getResources().getDrawable( R.drawable.ic_launcher, null); DataItem item = new DataItem(); item.dataName = lable; item.drawable = drawable; items.add(item); } // 计算应用程序的总屏数 screenCount = items.size() % NUMBER_PER_SCREEN == 0 ? items.size() / NUMBER_PER_SCREEN : items.size() / NUMBER_PER_SCREEN + 1; // Log.e("TAG", "SCRRENCOUNT:"+ screenCount); // Log.e("TAG", "size:"+ items.size()); switcher = (ViewSwitcher) findViewById(R.id.view_switcher); switcher.setFactory(new ViewSwitcher.ViewFactory() { @Override public View makeView() { return inflater.inflate(R.layout.slidelistview, null); } }); next(null); } public void next(View v){ if(screenNo < screenCount-1){ screenNo++; switcher.setInAnimation(this, R.anim.slide_in_right); switcher.setOutAnimation(this, R.anim.slide_out_left); Log.e("TAG", "screenNo:" + screenNo); ((GridView)switcher.getNextView()).setAdapter(adapter); switcher.showNext(); } } public void prev(View v){ if(screenNo > 0){ screenNo--; switcher.setInAnimation(this, R.anim.slide_in_left); switcher.setOutAnimation(this, R.anim.slide_out_right); ((GridView)switcher.getNextView()).setAdapter(adapter); switcher.showPrevious(); } } private BaseAdapter adapter = new BaseAdapter() { @Override public int getCount() { // 到了最后一页 if(screenNo == screenCount - 1 && items.size() % NUMBER_PER_SCREEN != 0){ return items.size() % NUMBER_PER_SCREEN; } else return NUMBER_PER_SCREEN; } @Override public Object getItem(int position) { // Log.e("TAG", "no:"+ (screenNo*NUMBER_PER_SCREEN+position)); //if((screenNo*NUMBER_PER_SCREEN+position) < items.size()) return items.get(screenNo*NUMBER_PER_SCREEN + position); //else // return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if(convertView == null){ view = inflater.inflate(R.layout.labelicon, null); } ImageView imageView = (ImageView) view.findViewById(R.id.image_view); imageView.setImageDrawable(((DataItem) getItem(position)).drawable); // DataItem pro = (DataItem) getItem(position); TextView textView = (TextView) view.findViewById(R.id.text_view); // if(pro != null) textView.setText(((DataItem) getItem(position)).dataName); // } return view; } }; }

注:ic_launcher.png自己随便找张图片放在drawable目录下,程序里改下名称就可以了

最新回复(0)