【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
1. 概述:
StackView(堆View),一系列View的集合,这些View以层叠样式显示,并且View之间可以进行切换(切换方式有两种:(1)拖动StackView
组件中的某一个View,(2)通过代码控制,下面介绍),这样每一个View都有机会显示给用户,供用户使用,并且在多个View切换过程中可以
添加动画效果。
2. 效果图:
(1)StackView默认显示效果,如下图:
(2)用鼠标向下拖动蓝色View,如下图:
(3)释放拖动的蓝色View,StackView会将下一个View切换到前台显示,如下图:
3. 代码实现:
(1)res/layout/main.xml实现:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "horizontal"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
>
<StackView
android:id = "@+id/mStackView"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:loopViews = "true"
/>
<LinearLayout
android:orientation = "vertical"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
>
<Button
android:id = "@+id/previousButton"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "前一张"
/>
<Button
android:id = "@+id/nextButton"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "后一张"
/>
</LinearLayout>
</LinearLayout>
(2)主Activity实现:
package com.focus.stackview;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.StackView;
public class StackViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final StackView stackView = (StackView) findViewById(R.id.mStackView);
ColorAdapter colorAdapter = new ColorAdapter(this, mColors);
stackView.setAdapter(colorAdapter);
final Button previousButon = (Button) findViewById(R.id.previousButton);
previousButon.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
stackView.showPrevious();
}
});
final Button nextButton = (Button) findViewById(R.id.nextButton);
nextButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
stackView.showNext();
}
});
}
private int [] mColors = {Color.BLUE, Color.CYAN, Color.GRAY, Color.GREEN, Color.RED};
}
(3)StackView的Adapter实现:
package com.focus.stackview;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
public class ColorAdapter extends BaseAdapter {
private Context mContext;
private int [] mColors;
public ColorAdapter(Context context, int [] colors) {
mContext = context;
mColors = colors;
}
public int getCount() {
return mColors == null ? 0 : mColors.length;
}
public Object getItem(int position) {
return mColors == null ? null : mColors[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View cacheView, ViewGroup parent) {
LinearLayout.LayoutParams colorLayoutParams = new LinearLayout.LayoutParams(100, 100);
LinearLayout colorLayout = new LinearLayout(mContext);
colorLayout.setBackgroundColor(mColors[position]);
colorLayout.setLayoutParams(colorLayoutParams);
return colorLayout;
}
}