仿Android系统 Lanuncher界面
欣赏别人是一种境界,善待别人是一种胸怀,关心别人是一种品质,理解别人是一种涵养,帮助别人是一种快乐,学习别人是一种智慧,团结别人是一种能力,借鉴别人是一种收获
package com.crazyit.ui.viewanimator;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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.Toast;
import android.widget.ViewSwitcher;
import java.util.ArrayList;
import java.util.List;
/**
* ViewSwitcher 代表了视图切换的组件,它继承了 FrameLayout
* 简单功能与用法
*/
public class ViewSwitcherActivity extends AppCompatActivity {
public static final int NUMBER_PER_SCREEN = 24;
public static class DataItem {
private String dataName;
public Drawable drawable;
}
private List<DataItem> items = new ArrayList<>();
private int currentScreen = -1;
private int screenCount;
ViewSwitcher switcher;
LayoutInflater inflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_switcher);
inflater = LayoutInflater.from(this);
for (int i = 0; i < 100; i++) {
String lable = "" + i;
Drawable drawable = getResources().getDrawable(R.mipmap.fuqi);
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;
switcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);
switcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
return inflater.inflate(R.layout.slidelistview, null);
}
});
next(null);
}
public void next(View v) {
if (currentScreen==screenCount - 1) {
Toast.makeText(this, "已经是最后一页啦", Toast.LENGTH_SHORT).show();
return;
}
if (currentScreen < screenCount - 1) {
currentScreen++;
switcher.setInAnimation(this, R.anim.slide_in_right);
switcher.setOutAnimation(this, R.anim.slide_out_left);
((GridView) switcher.getNextView()).setAdapter(adapter);
switcher.showPrevious();
}
}
public void prev(View v)
{
if (currentScreen==0) {
Toast.makeText(this, "已经是第一页啦", Toast.LENGTH_SHORT).show();
return;
}
if (currentScreen > 0)
{
currentScreen--;
switcher.setInAnimation(this, android.R.anim.slide_in_left);
switcher.setOutAnimation(this, android.R.anim.slide_out_right);
((GridView) switcher.getNextView()).setAdapter(adapter);
switcher.showPrevious();
}
}
private BaseAdapter adapter = new BaseAdapter() {
@Override
public int getCount() {
if (currentScreen==screenCount-1&&items.size()/NUMBER_PER_SCREEN!=0){
return items.size()%NUMBER_PER_SCREEN;
}
return NUMBER_PER_SCREEN;
}
@Override
public DataItem getItem(int position) {
return items.get(currentScreen*NUMBER_PER_SCREEN+position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view==null){
view = inflater.inflate(R.layout.lable_icon,null);
}
ImageView imageview = (ImageView) view.findViewById(R.id.imageView);
imageview.setImageDrawable(getItem(position).drawable);
TextView textView = (TextView) view.findViewById(R.id.tv);
textView.setText(getItem(position).dataName);
return view;
}
};
}
布局界面
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.crazyit.ui.viewanimator.ViewSwitcherActivity">
<ViewSwitcher
android:id="@+id/viewSwitcher"
android:layout_width="match_parent"
android:layout_height="match_parent"></ViewSwitcher>
<Button
android:id="@+id/btn_prev"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:onClick="prev"
android:textSize="24sp"
android:text="<" />
<Button
android:id="@+id/btn_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:onClick="next"
android:textSize="24sp"
android:text=">" />
</RelativeLayout>
列表项的布局文件
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"></GridView>
动画的布局文件
<?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>
----------
<?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>