A. android 中 ScrollView 如何實現類似 iPhone 中 UIScrollView 的分頁功能
1。你可以用ViewFlipper
來實現效果,每一張圖片為一頁,加上滑屏動畫效果,這個網上資料很全。2。你可以使用gallery來顯示圖片,這個跟ListView的使用方法是一樣的,網上資料和SDK文檔裡面都介紹很詳細。3。用手勢監聽需要給View上面實現OntouchListener,具體方法跟ViewFlipper的翻頁效果是一樣的
B. android怎麼使用scrollview
1.
<!-- ScrollView中包含其他控制項-->
<ScrollView
android:id="@+id/scrollView_showMessages"
android:layout_width="fill_parent"
android:layout_height="310dp"
>
<TextView
android:id="@+id/textView_showMessages"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="25dp"
/>
</ScrollView>
2.
//onCreate()中findView:
mScrollView_showMessages=(ScrollView)findViewById(R.id.scrollView_showMessages);
//在需要的地方,讓ScrollView滾動至指定位置
mScrollView_showMessages.scrollTo(0,mTextView_showMessages.getBottom());
C. android scrollview內存溢出怎麼解決
android scrollview內存溢出通常是由內存泄露導致。
1、內存泄露導致
由於我們程序的失誤,長期保持某些資源(如Context)的引用,垃圾回收器就無法回收它,當然該對象佔用的內存就無法被使用,這就造成內存泄露。
Android 中常見就是Activity被引用在調用finish之後卻沒有釋放,第二次打開activity又重新創建,這樣的內存泄露不斷的發生,則會導致內存的溢出。
Android的每個應用程序都會使用一個專有的Dalvik虛擬機實例來運行,它是由Zygote服務進程孵化出來的,也就是說每個應用程序都是在屬於自己的進程中運行的。Android為不同類型的進程分配了不同的內存使用上限,如果程序在運行過程中出現了內存泄漏的而造成應用進程使用的內存超過了這個上限,則會被系統視為內存泄漏,從而被kill掉,這使得僅僅自己的進程被kill掉,而不會影響其他進程.
2、佔用內存較多的對象
保存了多個耗用內存過大的對象(如Bitmap)或載入單個超大的圖片,造成內存超出限制。
使用方法比較簡單:
· 選擇DDMS視圖,並打開Devices視圖和Heap視圖
· 點擊選擇要監控的進程,比如:上圖中我選擇的是system_process
· 選中Devices視圖界面上的"update heap" 圖標
· 點擊Heap視圖中的"Cause GC" 按鈕(相當於向虛擬機發送了一次GC請求的操作)
在Heap視圖中選擇想要監控的Type,一般我們會觀察dataobject的 total size的變化,正常情況下total size的值會穩定在一個有限的范圍內,也就說程序中的代碼良好,沒有造成程序中的對象不被回收的情況。如果代碼中存在沒有釋放對象引用的情況,那麼data object的total size在每次GC之後都不會有明顯的回落,隨著操作次數的增加而total size也在不斷的增加。(說明:選擇好data object後,不斷的操作應用,這樣才可以看出total size的變化)。如果totalsize確實是在不斷增加而沒有回落,說明程序中有沒有被釋放的資源引用。那麼我們應該怎麼來定位呢?
Android中內存泄露定位
通過DDMS工具可以判斷應用程序中是否存在內存泄漏的問題,那又如何定位到具體出現問題的代碼片段,最終找到問題所在呢?內存分析工具MAT Memory Analyzer Tool解決了這一難題。MAT工具是一個Eclipse 插件,同時也有單獨的RCP 客戶端,MAT工具的解析文件是.hprof,這個文件存放了某進程的內存快照。MAT工具定位內存泄漏具體位置的方法如下:
① 生成.hprof文件。Eclipse中生成.hprof文件的方法有很多,不同Android版本中生成.hprof的方式也稍有差別,但它們整體思路是一樣的。我們在DDMS界面選中想要分析的應用進程,在Devices視圖界面上方的一行圖標按鈕中,同時選中「Update Heap」和「Dump HPROF file」兩個按鈕,這時DDMS將會自動生成當前選中進程的.hprof文件。
② 將.hprof 文件導入到MAT工具中,MAT工具會自動解析並生成報告,點擊「Dominator Tree」按鈕,並按包分組,選擇已定義的包類點右鍵,在彈出的菜單中選擇List objects﹥With incoming references,這時會列出所有可疑的類。右鍵點擊某一項,並選擇Path to GC Roots﹥excludeweak/soft references,MAT工具會進一步篩選出跟程序相關的所有內存泄漏的類。這樣就可以追蹤到某一個產生內存泄漏的類的具體代碼中。
使用MAT內存分析工具查找內存泄漏的根本思路是找到哪個類的對象的引用沒有被釋放,然後分析沒有被釋放的原因,最終定位到代碼中哪些片段存在著內存泄漏。
D. android 使用多個linearlayout嵌套scrollview
其原因是加了marginTop之後,scrollView初始顯示的位置向下移動了10dp,你如果想要讓他正常顯示,必須在代碼裡面設置一下scrollView的初始顯示位置就可以了。mScrollView.smoothScrollTo(0,0).
可修改代碼為下面的就可以了。
正確代碼:
E. Android scrollview滾動條顯示不出來怎麼辦
正好也遇到這個問題,剛看到的分享下 android:background 設置背景色/背景圖片。可以通過以下兩種方法設置背景為透明:」@android:color/transparent」和」@null」。注意TextView默認是透明的,不用寫此屬性,但是Buttom/ImageButton/ImageView想透
F. android開發怎麼刷新 scrollview
代碼很簡單,但是很實用,適合在一個Activity中要刷新局部的UI,比如在掃描一維碼的時候,要把每次掃描的結果都顯示在界面上
創建一個包含ScrollView的布局文件:
2.實現ScrollView的刷新
代碼如下:package com.example.uirefresh;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;
public class MainActivity extends Activity implements android.view.View.OnClickListener{
private Button btnExit;
private TextView text;
private ScrollView scroll;
private boolean bool = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnExit = (Button) findViewById(R.id.exit);
text = (TextView) findViewById(R.id.text);
scroll = (ScrollView) findViewById(R.id.scroll);
btnExit.setOnClickListener(this);
//在主線程main中開一子線程來刷新局部的ScrollView
new Thread(new RefreshThread()).start();
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.exit :
finish();
break;
}
}
public class RefreshThread implements Runnable{
@Override
public void run() {
while(bool) {
try {
Thread.sleep(5000);//每五秒刷新一次
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (this) {
//用post方法刷新
text.post(new Runnable() {
@Override
public void run() {
text.append("Hello World...n");
}
});
}
}
}
}
@Override
protected void onDestroy(){
super.onDestroy();
bool = false;
}
}
G. android 如何禁止scrollview 滾動
android scrollview組件禁止滑動的方法;
xml配置:
android:id="@+id/sc_freement"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/category_line"
android:scrollbars="none"
android:fadingEdge="none">
</<span style="line-height: 21px; ">ScrollView>
java代碼控制:
ScrollView scrollView = (ScrollView)this.findViewById(R.id.sc_freement);
scrollView.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
return true;
}
});
H. android ScrollView實現原理,求助
視圖的滾動過程,其實是在不斷修改原點坐標。當手指觸摸後,ScrollView會暫時攔截觸摸事件,使用一個計時器。
假如在計時器到點後沒有發生手指移動事件,那麼ScrollView發送tracking events到被點擊的subView;若是在計時器到點後發生了移動事件,那麼ScrollView取消tracking自己促發滾動。
其子類可以重載
touchesShouldBegin: withEvent: inContentView: 決定自己是否接收touch事件。
pagingEnabled: 當值是YES會自動滾動到subView的邊界,默認是NO。
: 開始發送tracking messages消息給subView的時候會調用這個方法。以決定是否發送tracking messages消息到subView。假如返回NO,發送。YES則不發送。若是canCancelContentTouches屬性是NO,則不調用這個方法來影響如何處理滾動手勢。
ScrollView還可處理縮放和平移手勢,要實現這必須實現委託viewForZoomingInScrollView:和scrollViewDidEndZooming: withView: atScale:兩個方法。另外maximumZoomScale和minimumZoomScale兩個屬性要不一樣。
常用屬性介紹
maximumZoomScale 能放大的最大倍數,是浮點數。
minimumZoomScale 能縮小的最小倍數,是浮點數。
pagingEnabled 是否自動滾動到subView邊界
scrollEnabled 是否可以滾動
contentSize 裡面內容的大小,即可以滾動的大小,默認是0,沒有滾動效果
滾動時是否顯示水平滾動條
showsVerticalScrollIndicator 滾動時是否顯示垂直滾動條
bounces 默認是YES,就是滾動超過邊界會反彈,即有反彈回來的效果。若是NO,則滾動到達邊界會立刻停止
bouncesZoom 與bounces類似,只是反映在縮放效果上。
directionalLockEnabled 默認是NO,可以在垂直和水平方向同時運動。當值是YES時,視哪個方向開始則鎖定另外一個方向的滾動。
indicatorStyle 滾動條的樣式。總共3色:默認、黑、白
scrollIndicatorInsets 設置滾動條位置
tracking 當touch後還沒有拖動的時候是YES,否則NO
zoomBouncing 當內容放大到最大或者最小的時候值是YES,否則NO
zooming 當正在縮放的時候值是YES,否則NO
decelerating 當滾動後,手指放開但還在繼續滾動中。此時是YES,其它時候都是NO
decelerationRate 設置手指放開後的減速率
基本使用方法:
初始化:一般的控制項初始化都是可以用alloc和init來初始化的。
UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0,0.0,self.view.frame.size.width, 400)];
關於控制項添加與初始化,建議都採用代碼調用合適的初始化方法來操作,雖然IB布局能夠節省時間,但不能哪過很好了解整個代碼執行流程。
委託方法:UIScrollView也要指定委託對象,該委託對象的控制器同樣也要遵循UIScrollViewDelegate協議,實現其相應的代理方法。
scrollViewDidScroll:
scrollViewWillBeginDragging:
scrollViewDidEndDragging:
scrollViewDidEndDecelerating:
屬性作用CGPoint contentOffSet監控目前滾動的位置CGSize contentSize滾動范圍的大小UIEdgeInsets contentInset視圖在scrollView中的位置id<UIScrollerViewDelegate>
delegate設置協議BOOL directionalLockEnabled指定控制項是否只能在一個方向上滾動BOOL bounces控制控制項遇到邊框是否反彈BOOL alwaysBounceVertical控制垂直方向遇到邊框是否反彈BOOL alwaysBounceHorizontal控制水平方向遇到邊框是否反彈BOOL pagingEnabled控制控制項是否整頁翻動BOOL scrollEnabled控制控制項是否能滾動BOOL 控制是否顯示水平方向的滾動條BOOL
showsVerticalScrollIndicator控制是否顯示垂直方向的滾動條UIEdgeInsets scrollIndicatorInsets指定滾動條在scrollerView中的位置UIScrollViewIndicatorStyle
indicatorStyle設定滾動條的樣式float decelerationRate改變scrollerView的減速點位置BOOL tracking監控當前目標是否正在被跟蹤BOOL dragging監控當前目標是否正在被拖拽BOOL decelerating監控當前目標是否正在減速BOOL delaysContentTouches控制視圖是否延時調用開始滾動的方法BOOL canCancelContentTouches控制控制項是否接觸取消touch的事件float minimumZoomScale縮小的最小比例float maximumZoomScale放大的最大比例float zoomScale設置變化比例BOOL bouncesZoom控制縮放的時候是否會反彈BOOL zooming判斷控制項的大小是否正在改變BOOL zoomBouncing判斷是否正在進行縮放反彈BOOL scrollsToTop控制控制項滾動到頂部
這里把UIScrollView的幾個要點總結下:
從你的手指touch屏幕開始,scrollView開始一個timer,如果:
1. 150ms內如果你的手指沒有任何動作,消息就會傳給subView。
2. 150ms內手指有明顯的滑動(一個swipe動作),scrollView就會滾動,消息不會傳給subView,這里就是產生問題二的原因。
3. 150ms內手指沒有滑動,scrollView將消息傳給subView,但是之後手指開始滑動,scrollView傳送touchesCancelled消息給subView,然後開始滾動。
觀察下tableView的情況,你先按住一個cell,cell開始高亮,手不要放開,開始滑動,tableView開始滾動,高亮取消。
delaysContentTouches的作用:
這個標志默認是YES,使用上面的150ms的timer,如果設置為NO,touch事件立即傳遞給subView,不會有150ms的等待。
cancelsTouches的作用:
這個標准默認為YES,如果設置為NO,這消息一旦傳遞給subView,這scroll事件不會再發生。