当前位置: 代码迷 >> Android >> android,viewpage实现应用软件工程师宝典;扩展包不管什么android版本都可以用;第一次安装使用从封面到提示帮助界面
  详细解决方案

android,viewpage实现应用软件工程师宝典;扩展包不管什么android版本都可以用;第一次安装使用从封面到提示帮助界面

热度:19   发布时间:2016-04-28 06:21:00.0
android,viewpage实现应用程序员宝典;扩展包不管什么android版本都可以用;第一次安装使用从封面到提示帮助界面

android.support.v4.view.ViewPager扩展包的类,还有地图api什么的引入的包这些只要你项目引入该包,该类不用考虑用户的手机版本

首先进入封面,刚进去的提示帮助界面,第一次安装使用时出现,以后不出现

<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" >
    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="50dp"
        android:layout_height="10dp"
        android:gravity="center"
        android:orientation="horizontal" >
        <TextView
            android:id="@+id/position_point_01"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:background="#00ff00" />
        <TextView
            android:layout_width="10dp"
            android:layout_height="10dp" />


        <TextView
            android:id="@+id/position_point_02"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:background="#666666" />
        <TextView
            android:layout_width="10dp"
            android:layout_height="10dp" />
        <TextView
            android:id="@+id/position_point_03"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:background="#666666" />
        <TextView
            android:layout_width="10dp"
            android:layout_height="10dp" />
        <TextView
            android:id="@+id/position_point_04"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:background="#666666" />
    </LinearLayout>
</RelativeLayout>

帮助界面的图片viewpager容器

package com.kane.interviewcollection;
import java.util.ArrayList;
import java.util.List;
import com.kane.interviewcollection.adapter.MyPageAdapter;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class HelpActivity extends Activity {
private ViewPager pager;
private MyPageAdapter pageAdapter;
private List<View> allViews = new ArrayList<View>();
private TextView[] allPoints = new TextView[4];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_help);
pager = (ViewPager) findViewById(R.id.pager);
//设置viewpager保存的view,若不设置,会一直添加经历过的view,会有bug
pager.setOffscreenPageLimit(3);

allPoints[0] = (TextView) findViewById(R.id.position_point_01);
allPoints[1] = (TextView) findViewById(R.id.position_point_02);
allPoints[2] = (TextView) findViewById(R.id.position_point_03);
allPoints[3] = (TextView) findViewById(R.id.position_point_04);
// 初始化数据
allViews.add(LayoutInflater.from(this).inflate(R.layout.page_01, null));
allViews.add(LayoutInflater.from(this).inflate(R.layout.page_02, null));
allViews.add(LayoutInflater.from(this).inflate(R.layout.page_03, null));
// 单独为第四个界面加入监听,进入主界面
View page4 = LayoutInflater.from(this).inflate(R.layout.page_04, null);
page4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent in = new Intent(HelpActivity.this, MainActivity.class);
startActivity(in);
finish();
}
});
allViews.add(page4);
pageAdapter = new MyPageAdapter(allViews);
pager.setAdapter(pageAdapter);
// 为pager加入监听
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// 改变颜色
for (int i = 0; i < allPoints.length; i++) {
allPoints[i].setBackgroundColor(Color.parseColor("#666666"));
}
allPoints[arg0].setBackgroundColor(Color.GREEN);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
}

主界面

package com.kane.interviewcollection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


import com.kane.interviewcollection.adapter.MyPageAdapter;
import com.kane.interviewcollection.adapter.QuestionAdapter;
import com.kane.interviewcollection.util.DialogManager;
import com.kane.interviewcollection.util.ExitApplication;
import com.kane.interviewcollection.util.Globals;
import com.kane.interviewcollection.util.QuesstionDAOUtils;


import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Color;


import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.KeyEvent;
import android.view.LayoutInflater;


import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.OnItemClickListener;
/**
 * 既能实现滑动切换,也能实现点击切换
 * @author lenovo
 *
 */
public class Main2Activity extends Activity {
private ViewPager pager;
TextView titleText;
private Button settingBtn;
// 下面的三个按钮
private Button[] bottomBtns = new Button[3];

// 未选中的按钮图片
private int[] allBottomImgs = { R.drawable.bottom_icon01_a,
R.drawable.bottom_icon02_a, R.drawable.bottom_icon03_a };
// 选中的按钮图片
private int[] allBottomImgsSelected = { R.drawable.bottom_icon01_b,
R.drawable.bottom_icon02_b, R.drawable.bottom_icon03_b };


// 声明循环为了在内部类使用
private int i;


// 点击设置按钮的浮动窗口
private PopupWindow win;
private MyPageAdapter pageAdapter;
private List<View> allViews = new ArrayList<View>();


// 所有头部要显示的标题内容
private String[] allTitleText = { "程序员面试宝典", "全部问题", "搜索问题" };




@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ExitApplication.getInstance().addActivity(this);//每个activity创建的时候添加到activity列表
setContentView(R.layout.activity_main2);
//进行头部和尾部的初始化
init("程序员面试宝典", 0);

//保存一个标志,表示程序打开过,下次进来不用帮助界面,这里的SharedPreferences类似web的application,取得是在cover中同一个
SharedPreferences s=getSharedPreferences("question_flag",
MODE_PRIVATE);
if (!s.getBoolean("showed", false)) {
Editor e=s.edit();
e.putBoolean("showed", true);
e.commit();
}

pager=(ViewPager)findViewById(R.id.pager);
//设置viewpager保存的view,若不设置,会一直添加经历过的view,会有bug
pager.setOffscreenPageLimit(3);
//添加界面
allViews.add(LayoutInflater.from(this).inflate(R.layout.page_main, null));

View questionView=LayoutInflater.from(this).inflate(R.layout.page_question,null);
//初始问题列表
initQuestionList(questionView);
allViews.add(questionView);
View searchView=LayoutInflater.from(this).inflate(R.layout.page_search, null);
initSearch(searchView);
allViews.add(searchView);

pageAdapter=new MyPageAdapter(allViews);
pager.setAdapter(pageAdapter);


//为pager设置一个监听,当页面滑动切换时,可以调整头部和尾部信息
pager.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int arg0) {
// 调整头部的文字
titleText.setText(allTitleText[arg0]);
if (arg0==1&&!keyword.equals("")) {
titleText.setText("搜索: " + keyword);
}
//调整底部按钮显示
for (int i = 0; i < bottomBtns.length; i++) {
if (i==arg0) {
bottomBtns[i].setBackgroundResource(allBottomImgsSelected[i]);
}
else {
bottomBtns[i].setBackgroundResource(allBottomImgs[i]);
}
}
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub

}

@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub

}
});

}

private ListView listView;
private QuestionAdapter adapter;
private List<Map<String, Object>> allValues=new ArrayList<Map<String,Object>>();
//声明几个分页的变量
private int pageNo=1;
private int pageSize=20;
private int count=0;
private int allPages=0;
private String keyword="";
//为了调用滑动事件中的内部类的另一个方法的参数
private int first;
private int visCount;
private int total;

private TextView footerText;
public void initQuestionList(View questionListView) {
listView=(ListView)questionListView.findViewById(R.id.list);
//接收关键字
keyword=getIntent().getStringExtra("keyword");
if (keyword==null) {
 init("全部问题",1);
 keyword="";
}
else{
//如果有关键词传入
init("搜索:"+keyword,1);
}
allValues=QuesstionDAOUtils.listDataPage(pageNo,pageSize,keyword);
//查询记录数
count=QuesstionDAOUtils.getAllCount(keyword);
//计算总页数
allPages=(count-1)/pageSize+1;

//加入一个提示的底部信息,每次下拉到分页的最后一个item
footerText=new TextView(this);
footerText.setText("z正在查询,请稍后.............");
footerText.setTextColor(Color.BLACK);
footerText.setTextSize(14);
listView.addFooterView(footerText);

//把数据加入到adapter里
adapter=new QuestionAdapter(this, allValues);
listView.setAdapter(adapter);
//加入监听,点击后才可以看到答案
listView.setOnItemClickListener(new OnItemClickListener(){


@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
//取得数据
Map<String,Object> map=allValues.get(arg2);
LinearLayout line =(LinearLayout)arg1;//arg1是当前行界面
if(line.getChildCount()==1){//里面只有问题那一个textview
//加入答案的textview
TextView text = new TextView(Main2Activity.this);
text.setText(map.get("answer").toString());
text.setTextSize(14);
text.setTextColor(Color.RED);


line.addView(text);
map.put("showFlag", true);
}
else{
//删除答案提示
line.removeViewAt(1);
map.put("showFlag", false);
}


}

});

/**
 * 滑动列表事件
 */
listView.setOnScrollListener(new OnScrollListener(){


@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
first = firstVisibleItem;
visCount = visibleItemCount;
total = totalItemCount;

}


@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState==OnScrollListener.SCROLL_STATE_IDLE&&
first+visCount==total&&total!=0){
if(pageNo<allPages){
//可以查询下一条数据
pageNo++;
//将新查询的数据合并到原有的数据集合
allValues.addAll(QuesstionDAOUtils.listDataPage(pageNo,
pageSize,keyword));
//通知界面修改
adapter.notifyDataSetChanged();
}
else{
// 已经查询了全部的数据,将footer删除
if (listView.getFooterViewsCount() > 0) {
listView.removeFooterView(footerText);
}
}
}

}});
}

private Button searchBtn;
private EditText searchText;
public void initSearch(View searchView) {
init("搜索问题",2);
searchBtn=(Button) searchView.findViewById(R.id.searchBtn);
searchText=(EditText)searchView.findViewById(R.id.searchText);
searchBtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
keyword=searchText.getText().toString();
//将列表数据重新查询
pageNo=1;
allValues.clear();
allValues.addAll(QuesstionDAOUtils.listDataPage(pageNo, pageSize, keyword));
//重新显示列表
adapter.notifyDataSetChanged();
//滑动回列表界面
pager.setCurrentItem(1,true);//1表示问题界面,true表示有变化过程


}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
new DialogManager().showExitHit(this);
return false;//执行上面,而不是默认的关闭activity
}
return super.onKeyDown(keyCode, event);//其他键原有功能保存
}

public void init(String title, int selectedBtn) {
// 分别取得公共界面的组件
settingBtn = (Button) findViewById(R.id.settingBtn);
titleText = (TextView) findViewById(R.id.title);
bottomBtns[0] = (Button) findViewById(R.id.bottom01);
bottomBtns[1] = (Button) findViewById(R.id.bottom02);
bottomBtns[2] = (Button) findViewById(R.id.bottom03);
// 每个界面的标题不一样
titleText.setText(title);
// 循环为底部的按钮加入监听,这里的i内部类要用,在外面声明了
for (i = 0; i < bottomBtns.length; i++) {
// 定义个临时变量,防止i一直自增,因为循环完一边后i已经是2了,第二次循环一开始内部类中就是3了
final int temp = i;
if (i == selectedBtn) {
// 选中的
bottomBtns[i].setBackgroundResource(allBottomImgsSelected[i]);
} else {
// 没有选中的
bottomBtns[i].setBackgroundResource(allBottomImgs[i]);
// 加入监听
bottomBtns[i].setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
if (temp==1) {
keyword="";
}
// 底部按钮点击后,应该自动切换到对应的界面
pager.setCurrentItem(temp, true);

}
});
}
}
/**
 * 设置按钮的监听事件
 */
settingBtn.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
// 没有浮动框要添加
if (win == null) {
// 先设置宽高,再设置界面
win = new PopupWindow(Globals.SCREEN_WIDTH / 4,
Globals.SCERRN_HEIGHT / 6);
View view = LayoutInflater.from(Main2Activity.this).inflate(
R.layout.float_window, null);
win.setContentView(view);


// 加入这些内部按钮的监听
TextView versionText = (TextView) view
.findViewById(R.id.show_version);
TextView authText = (TextView) view
.findViewById(R.id.about_author);
TextView exitText = (TextView) view.findViewById(R.id.exit);
versionText.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
Toast.makeText(Main2Activity.this, "当前版本是: 1.0",
Toast.LENGTH_LONG).show();
win.dismiss();// 关闭窗口


}
});
authText.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
Builder builder = new Builder(Main2Activity.this);
builder.setTitle("提示");
builder.setMessage("本作品由needkane发布,欢迎使用");
builder.setNegativeButton("关闭",
new DialogInterface.OnClickListener() {


@Override
public void onClick(
DialogInterface dialog,
int which) {
// TODO Auto-generated method stub


}
});


builder.create().show();
win.dismiss();// 浮动窗口消失
}
});
exitText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 退出程序
}
});
}
if (win.isShowing()) {
// 隐藏
win.dismiss();
} else {
// 显示
win.showAsDropDown(settingBtn);
}
}
});
}


}

  相关解决方案