當前位置:首頁 » 安卓系統 » android滑動分頁

android滑動分頁

發布時間: 2022-09-23 09:27:40

㈠ 如何在android studio 中的分頁滑動中使用其布局中的listview

這個是Viewpager 嵌套fragment 實現的 listview 的點擊監聽器OnItemClickListener 可以實現點擊進入相對應頁面

㈡ Android listview怎麼實現滾動分頁

通常這也分為兩種方式,一種是設置一個按鈕,用戶點擊即載入。另一種是當用戶滑動到底部時自動載入。今天我就和大家分享一下這個功能的實現。
首先,寫一個xml文件,moredata.xml,該文件即定義了放在listview底部的視圖:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/bt_load"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="載入更多數據" />
<ProgressBar
android:id="@+id/pg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:visibility="gone"
/>
</LinearLayout>

可以看到是一個按鈕和一個進度條。因為只做一個演示,這里簡單處理,通過設置控制項的visibility,未載入時顯示按鈕,載入時就顯示進度條。
寫一個item.xml,大家應該很熟悉了。用來定義listview的每個item的視圖。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/tv_title"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
/>
<TextView
android:textSize="12sp"
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
/>

</LinearLayout>

main.xml就不貼了,整個主界面就一個listview。
直接先看下Activity的代碼,在裡面實現分頁效果。

package com.notice.moredate;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MoreDateListActivity extends Activity implements OnScrollListener {

// ListView的Adapter
private SimpleAdapter mSimpleAdapter;
private ListView lv;
private Button bt;
private ProgressBar pg;
private ArrayList<HashMap<String,String>> list;
// ListView底部View
private View moreView;
private Handler handler;
// 設置一個最大的數據條數,超過即不再載入
private int MaxDateNum;
// 最後可見條目的索引
private int lastVisibleIndex;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

MaxDateNum = 22; // 設置最大數據條數

lv = (ListView) findViewById(R.id.lv);

// 實例化底部布局
moreView = getLayoutInflater().inflate(R.layout.moredate, null);

bt = (Button) moreView.findViewById(R.id.bt_load);
pg = (ProgressBar) moreView.findViewById(R.id.pg);
handler = new Handler();

// 用map來裝載數據,初始化10條數據
list = new ArrayList<HashMap<String,String>>();
for (int i = 0; i < 10; i++) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("ItemTitle", "第" + i + "行標題");
map.put("ItemText", "第" + i + "行內容");
list.add(map);
}
// 實例化SimpleAdapter
mSimpleAdapter = new SimpleAdapter(this, list, R.layout.item,
new String[] { "ItemTitle", "ItemText" },
new int[] { R.id.tv_title, R.id.tv_content });
// 加上底部View,注意要放在setAdapter方法前
lv.addFooterView(moreView);
lv.setAdapter(mSimpleAdapter);
// 綁定監聽器
lv.setOnScrollListener(this);

bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
pg.setVisibility(View.VISIBLE);// 將進度條可見
bt.setVisibility(View.GONE);// 按鈕不可見

handler.postDelayed(new Runnable() {

@Override
public void run() {
loadMoreDate();// 載入更多數據
bt.setVisibility(View.VISIBLE);
pg.setVisibility(View.GONE);
mSimpleAdapter.notifyDataSetChanged();// 通知listView刷新數據
}

}, 2000);
}
});

}

private void loadMoreDate() {
int count = mSimpleAdapter.getCount();
if (count + 5 < MaxDateNum) {
// 每次載入5條
for (int i = count; i < count + 5; i++) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("ItemTitle", "新增第" + i + "行標題");
map.put("ItemText", "新增第" + i + "行內容");
list.add(map);
}
} else {
// 數據已經不足5條
for (int i = count; i < MaxDateNum; i++) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("ItemTitle", "新增第" + i + "行標題");
map.put("ItemText", "新增第" + i + "行內容");
list.add(map);
}
}

}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// 計算最後可見條目的索引
lastVisibleIndex = firstVisibleItem + visibleItemCount - 1;

// 所有的條目已經和最大條數相等,則移除底部的View
if (totalItemCount == MaxDateNum + 1) {
lv.removeFooterView(moreView);
Toast.makeText(this, "數據全部載入完成,沒有更多數據!", Toast.LENGTH_LONG).show();
}

}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// 滑到底部後自動載入,判斷listview已經停止滾動並且最後可視的條目等於adapter的條目
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
&& lastVisibleIndex == mSimpleAdapter.getCount()) {
// 當滑到底部時自動載入
// pg.setVisibility(View.VISIBLE);
// bt.setVisibility(View.GONE);
// handler.postDelayed(new Runnable() {
//
// @Override
// public void run() {
// loadMoreDate();
// bt.setVisibility(View.VISIBLE);
// pg.setVisibility(View.GONE);
// mSimpleAdapter.notifyDataSetChanged();
// }
//
// }, 2000);

}

}

}

㈢ android如何不用gallery實現圖片橫向滑動效果,還能動態添加圖片 可分頁滑動或者滑到拿停在哪

gallery是封裝好的用來顯示圖片的控制項。靈活性不高。況且用自己代碼來實現圖片橫向滑動效果復雜度並不高,但是靈活性好。

㈣ Android banner滑動到最後一個卡頓

流程執行異常導致的。Androidbanner滑動到最後一個卡頓可通過優化流程盡量的減少流程中不必要的持鎖或減小持鎖范圍來降低。例如在Androidbanner上推出的無鎖窗口動畫,就實現了無需持有鎖播放窗口動畫,從而極大減少滑動到最後一個卡頓的概率。

㈤ android軟體開發怎樣實現分頁功能

ListView分頁:
(一)、目的:
Android 應用開發中,採用ListView組件來展示數據是很常用的功能,當一個應用要展現很多的數據時,一般情況下都不會把所有的數據一次就展示出來,而是通過 分頁的形式來展示數據,這樣會有更好的用戶體驗。因此,很多應用都是採用分批次載入的形式來獲取用戶所需的數據。例如:微博客戶端可能會在用戶滑 動至列表底端時自動載入下一頁數據,也可能在底部放置一個"查看更多"按鈕,用戶點擊後,載入下一頁數據。
(二)、核心技術點:
藉助 ListView組件的OnScrollListener監聽事件,去判斷何時該載入新數據;
往伺服器get傳遞表示頁碼的參數:page。而該page會每載入一屏數據後自動加一;
利用addAll()方法不斷往list集合末端添加新數據,使得適配器的數據源每新載入一屏數據就發生變化;
利用適配器對象的notifyDataSetChanged()方法。該方法的作用是通知適配器自己及與該數據有關的view,數據已經發生變動,要刷新自己、更新數據。

(三)、 OnScrollListener監聽事件 :
1、該監聽器中有兩個需要實現的方法:
onScrollStateChanged(AbsListView view, int scrollState):監聽屏幕的滾動狀態的變動情況
onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount):監聽屏幕滾動的item的數量
2、 scrollState 回調順序如下:
第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1):表示正在滾動。當屏幕滾動且用戶使用的觸碰或手指還在屏幕上時為1
第2次:scrollState =SCROLL_STATE_FLING(2) :表示手指做了拋的動作(手指離開屏幕前,用力滑了一下,屏幕產生慣性滑動)。
第3次:scrollState =SCROLL_STATE_IDLE(0) :表示屏幕已停止。屏幕停止滾動時為0。
3、 onScroll中參數講解:
firstVisibleItem:當前窗口中能看見的第一個列表項ID(從0開始)
visibleItemCount:當前窗口中能看見的列表項的個數(小半個也算)
totalItemCount:列表項的總數
4、思路:
當滾到最後一條,載入新數據;
適配器的數據源要進行累加:totalList.addAll(list);
數據發生變化,適配器通知:adapter.notifyDataSetChanged();【牢記】
判斷是否滾到最後一行。
(五)、核心代碼:

1、布局文件的核心代碼:

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<ListView
android:id="@+id/listView_main"
android:layout_below="@+id/button_main_init"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>

<LinearLayout
android:id="@+id/layout_main_nextpage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#000"
android:visibility="invisible"
android:gravity="center"
android:onClick="clickButton"
android:padding="5dp">

<ProgressBar
android:id="@+id/progressBar_main"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

<TextView
android:id="@+id/text_main_nextpage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="18sp"
android:onClick="clickButton"
android:textColor="#fff"
android:text="點擊載入更多數據"/>
</LinearLayout>

</RelativeLayout>
2、Activity頁面核心代碼:

publicclass MainActivity extends Activity {
privateStringTAG= "MainActivity";
privateListView listView_main;
privateLinearLayout layout_main_nextpage;

private MysqliteDatabaseHelper dbHelper = null;

// 用於分頁顯示數據的屬性
privateintpageSize= 30;// 每頁顯示的條數
privateintcurPage= 1;
privateintrowCount= 0;
privateintpageCount= 0;// 總頁數

privatebooleanisBottom=false;// 判斷是否滾動到數據最後一條
private List<Map<String, Object>> totalList = null;// 載入到適配器中的數據源
private SimpleAdapter adapter = null;

@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

listView_main = (ListView) findViewById(R.id.listView_main);
layout_main_nextpage = (LinearLayout) findViewById(R.id.layout_main_nextpage);

// 實例化訪問資料庫幫助類
dbHelper = new MySQLiteDatabaseHelper();
// 獲取數據表一共有多少條,從而計算共有多少頁
rowCount=dbHelper.selectCount("select id from android_basic",null);
// 計算總頁碼數
pageCount = (int) Math.ceil(rowCount / (float) pageSize);

// 如果當前頁為第一頁,則數據源集合中就是第一頁的內容
if (curPage == 1) {
totalList = getCurpageList(1);
}
adapter = new SimpleAdapter(this, totalList,
R.layout.item_listview_main, new String[] { "_id", "title" },
newint[] { R.id.text_item_listview_id,
R.id.text_item_listview_title});
listView_main.setAdapter(adapter);

// 給ListView對象設置滾動監聽器,以此來判斷是否已經滾動到最後一條,從而決定是否載入新數據
listView_main.setOnScrollListener(new OnScrollListener() {
@Override
publicvoid onScrollStateChanged(AbsListView view, int scrollState) {
if (isBottom) {
// 如果滾到最後一條數據(即:屏幕最底端),則顯示:「載入更多新數據」
if(curPage < pageCount) {
layout_main_nextpage.setVisibility(View.VISIBLE);
}
} else {
layout_main_nextpage.setVisibility(View.GONE);
}
}

@Override
publicvoid onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// Log.i(TAG, "==" + firstVisibleItem + ":::" + visibleItemCount
// + ":::" + totalItemCount);
// 判斷是否已經滾動到了最後一條,從而決定是否提示載入新數據
isBottom = (firstVisibleItem + visibleItemCount == totalItemCount);
}
});
}

publicvoid clickButton(View view) {
switch (view.getId()) {
caseR.id.layout_main_nextpage:
// Log.i(TAG, "==" + curPage + ":::" + pageCount);
// 如果不是最後一頁,則讓當前頁碼累加,讓數據源累加新數據,並通知適配器信息發生變化
if(curPage < pageCount) {
curPage++;
totalList.addAll(getCurpageList(curPage));
adapter.notifyDataSetChanged();
}
// 只要點擊了提示「載入新數據」的信息,就讓其隱藏
layout_main_nextpage.setVisibility(View.GONE);
break;
default:
break;
}
}

// 獲取每一頁的數據,返回List集合
private List<Map<String, Object>> getCurpageList(int currentPage) {
int offset = (currentPage - 1) * pageSize;
String sql = "select id _id ,title from android_basic limit ? , ?";
returndbHelper.selectData(sql, new String[] { offset + "",
pageSize + "" });
}

}

㈥ android app 開發 分頁有什麼意義 nearbysearchoption.pagenum;百度地圖po

分頁的意義在於,提高用戶的使用體驗,不用再點擊下一頁的按鈕,滑動進行刷新即可。

㈦ Android 滑動切換窗口如何實現

自定義scrollview試試呢?

㈧ android引導頁在最後一個頁面在滑動跳轉頁面怎麼做

第一個activity
package com.qualitypicture.activity;
import java.util.ArrayList;
import java.util.List;
import com.qualitypicture.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
public class GuideActivity extends Activity
{
private ViewPager viewPager;
private List<View> mImageViews; // 滑動的圖片集合
private int[] imageResId; // 圖片ID
private int currentItem = 0; // 當前圖片的索引號
private GestureDetector gestureDetector; // 用戶滑動
/** 記錄當前分頁ID */
private int flaggingWidth;// 互動翻頁所需滾動的長度是當前屏幕寬度的1/3
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉標題欄
setContentView(R.layout.guide_activity);
gestureDetector = new GestureDetector(new GuideViewTouch());
// 獲取解析度
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
flaggingWidth = dm.widthPixels / 3;
imageResId = new int[]
{ R.drawable.pic_1, R.drawable.pic_2, R.drawable.pic_3, R.drawable.pic_4 };
mImageViews = new ArrayList<View>();
// 初始化圖片資源
LayoutInflater viewInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// 0
View convertView0 = viewInflater.inflate(R.layout.guide_item, null);
LinearLayout linearLayout0 = (LinearLayout) convertView0.findViewById(R.id.guide_item);
linearLayout0.setBackgroundResource(imageResId[0]);
mImageViews.add(linearLayout0);
// 1
View convertView1 = viewInflater.inflate(R.layout.guide_item, null);
LinearLayout linearLayout1 = (LinearLayout) convertView1.findViewById(R.id.guide_item);
linearLayout1.setBackgroundResource(imageResId[1]);
mImageViews.add(linearLayout1);
// 2
View convertView2 = viewInflater.inflate(R.layout.guide_item, null);
LinearLayout linearLayout2 = (LinearLayout) convertView2.findViewById(R.id.guide_item);
linearLayout2.setBackgroundResource(imageResId[2]);
mImageViews.add(linearLayout2);
// 3
View convertView3 = viewInflater.inflate(R.layout.guide_item, null);
LinearLayout linearLayout3 = (LinearLayout) convertView3.findViewById(R.id.guide_item);
linearLayout3.setBackgroundResource(imageResId[3]);
mImageViews.add(linearLayout3);
// button監聽
Button btn = (Button) convertView3.findViewById(R.id.start);
btn.setVisibility(View.VISIBLE);
btn.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
GoToMainActivity();
}
});
viewPager = (ViewPager) findViewById(R.id.guide_view);
viewPager.setAdapter(new MyAdapter());// 設置填充ViewPager頁面的適配器
// 設置一個監聽器,當ViewPager中的頁面改變時調用
viewPager.setOnPageChangeListener(new MyPageChangeListener());
}
@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
if (gestureDetector.onTouchEvent(event))
{
event.setAction(MotionEvent.ACTION_CANCEL);
}
return super.dispatchTouchEvent(event);
}
private class GuideViewTouch extends SimpleOnGestureListener
{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
if (currentItem == 3)
{
if (Math.abs(e1.getX() - e2.getX()) > Math.abs(e1.getY() - e2.getY()) && (e1.getX() - e2.getX() <= (-flaggingWidth) || e1.getX() - e2.getX() >= flaggingWidth))
{
if (e1.getX() - e2.getX() >= flaggingWidth)
{
GoToMainActivity();
return true;
}
}
}
return false;
}
}
/**
* 進入主界面
*/
void GoToMainActivity()
{
Intent intent = new Intent(GuideActivity.this, TabHostActivity.class);
startActivity(intent);
finish();
}
/**
* 當ViewPager中頁面的狀態發生改變時調用
*
* @author Administrator
*
*/
private class MyPageChangeListener implements OnPageChangeListener
{
public void onPageSelected(int position)
{
currentItem = position;
}
public void onPageScrollStateChanged(int arg0)
{
}
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
}
/**
* 填充ViewPager頁面的適配器
*
* @author Administrator
*
*/
private class MyAdapter extends PagerAdapter
{
@Override
public int getCount()
{
return imageResId.length;
}
@Override
public Object instantiateItem(View arg0, int arg1)
{
((ViewPager) arg0).addView(mImageViews.get(arg1));
return mImageViews.get(arg1);
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2)
{
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1)
{
return arg0 == arg1;
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1)
{
}
@Override
public Parcelable saveState()
{
return null;
}
@Override
public void startUpdate(View arg0)
{
}
@Override
public void finishUpdate(View arg0)
{
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK)
{
GoToMainActivity();
return false;
}
return super.onKeyDown(keyCode, event);
}
}

布局文件
第一個
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/guide_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
第二個
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android"
android:id="@+id/guide_item"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="5" />
<Button
android:id="@+id/start"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#00000000"
android:text="@string/butTxt"
android:textColor="#00000000"
android:visibility="gone" >
</Button>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
大家用的時候文件名要寫對,好友圖片也要相應的放到文件中去!

㈨ Android開源項目PDFView如何加分頁

使用拆分文檔功能。
在PDF編輯器中,對pdf文件進行分頁,還可以使用拆分文檔功能。拆分文檔功能在功能欄的「文檔」中。在點擊拆分文檔後,同樣會彈出對應的對話框,我們將其中設置調整一下,其中每次拆分頁數是可以根據需求進行更改的,在完善好其他設置之後,點擊確定即可完成pdf分頁的操作。

熱點內容
python用戶 發布:2024-04-20 13:51:46 瀏覽:748
光遇蘋果如何下載安卓服 發布:2024-04-20 13:40:03 瀏覽:460
半歲學編程 發布:2024-04-20 13:17:53 瀏覽:217
linux按鍵 發布:2024-04-20 13:17:52 瀏覽:832
最頂配的伺服器能容納多少ip 發布:2024-04-20 13:17:44 瀏覽:514
貸款車解壓需要什麼 發布:2024-04-20 13:14:52 瀏覽:72
安卓手機電腦怎麼切換 發布:2024-04-20 13:13:25 瀏覽:893
android交叉編譯環境 發布:2024-04-20 13:00:10 瀏覽:184
伺服器怎麼搭建中間層 發布:2024-04-20 12:40:02 瀏覽:98
如何獲取網路的賬號和密碼 發布:2024-04-20 12:34:06 瀏覽:921