導航:首頁 > 操作系統 > android如何刷新view

android如何刷新view

發布時間:2022-07-16 14:17:35

『壹』 android 曲線圖怎麼刷新view

根據點的數量將Canvas等分,等分後先繪制圖表的所有橫軸和縱軸。再將數據轉化為點坐標,繪制到屏幕上,最後將相鄰兩點連成線即可。

源碼如下:

[java] view plain


import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;

/**********************************************************
* @文件名稱:LineGraphicView.java
* @文件作者:rzq
* @創建時間:2015年5月27日 下午3:05:19
* @文件描述:自定義簡單曲線圖
* @修改歷史:2015年5月27日創建初始版本
**********************************************************/
class LineGraphicView extends View
{
/**
* 公共部分
*/
private static final int CIRCLE_SIZE = 10;

private static enum Linestyle
{
Line, Curve
}

private Context mContext;
private Paint mPaint;
private Resources res;
private DisplayMetrics dm;

/**
* data
*/
private Linestyle mStyle = Linestyle.Curve;

private int canvasHeight;
private int canvasWidth;
private int bheight = 0;
private int blwidh;
private boolean isMeasure = true;
/**
* Y軸最大值
*/
private int maxValue;
/**
* Y軸間距值
*/
private int averageValue;
private int marginTop = 20;
private int marginBottom = 40;

/**
* 曲線上總點數
*/
private Point[] mPoints;
/**
* 縱坐標值
*/
private ArrayList<Double> yRawData;
/**
* 橫坐標值
*/
private ArrayList<String> xRawDatas;
private ArrayList<Integer> xList = new ArrayList<Integer>();// 記錄每個x的值
private int spacingHeight;

public LineGraphicView(Context context)
{
this(context, null);
}

public LineGraphicView(Context context, AttributeSet attrs)
{
super(context, attrs);
this.mContext = context;
initView();
}

private void initView()
{
this.res = mContext.getResources();
this.mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
dm = new DisplayMetrics();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(dm);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
if (isMeasure)
{
this.canvasHeight = getHeight();
this.canvasWidth = getWidth();
if (bheight == 0)
bheight = (int) (canvasHeight - marginBottom);
blwidh = dip2px(30);
isMeasure = false;
}
}

@Override
protected void onDraw(Canvas canvas)
{
mPaint.setColor(res.getColor(R.color.color_f2f2f2));

drawAllXLine(canvas);
// 畫直線(縱向)
drawAllYLine(canvas);
// 點的操作設置
mPoints = getPoints();

mPaint.setColor(res.getColor(R.color.color_ff4631));
mPaint.setStrokeWidth(dip2px(2.5f));
mPaint.setStyle(Style.STROKE);
if (mStyle == Linestyle.Curve)
{
drawScrollLine(canvas);
}
else
{
drawLine(canvas);
}

mPaint.setStyle(Style.FILL);
for (int i = 0; i < mPoints.length; i++)
{
canvas.drawCircle(mPoints[i].x, mPoints[i].y, CIRCLE_SIZE / 2, mPaint);
}
}

/**
* 畫所有橫向表格,包括X軸
*/
private void drawAllXLine(Canvas canvas)
{
for (int i = 0; i < spacingHeight + 1; i++)
{
canvas.drawLine(blwidh, bheight - (bheight / spacingHeight) * i + marginTop, (canvasWidth - blwidh),
bheight - (bheight / spacingHeight) * i + marginTop, mPaint);// Y坐標
drawText(String.valueOf(averageValue * i), blwidh / 2, bheight - (bheight / spacingHeight) * i + marginTop,
canvas);
}
}

/**
* 畫所有縱向表格,包括Y軸
*/
private void drawAllYLine(Canvas canvas)
{
for (int i = 0; i < yRawData.size(); i++)
{
xList.add(blwidh + (canvasWidth - blwidh) / yRawData.size() * i);
canvas.drawLine(blwidh + (canvasWidth - blwidh) / yRawData.size() * i, marginTop, blwidh
+ (canvasWidth - blwidh) / yRawData.size() * i, bheight + marginTop, mPaint);
drawText(xRawDatas.get(i), blwidh + (canvasWidth - blwidh) / yRawData.size() * i, bheight + dip2px(26),
canvas);// X坐標
}
}

private void drawScrollLine(Canvas canvas)
{
Point startp = new Point();
Point endp = new Point();
for (int i = 0; i < mPoints.length - 1; i++)
{
startp = mPoints[i];
endp = mPoints[i + 1];
int wt = (startp.x + endp.x) / 2;
Point p3 = new Point();
Point p4 = new Point();
p3.y = startp.y;
p3.x = wt;
p4.y = endp.y;
p4.x = wt;

Path path = new Path();
path.moveTo(startp.x, startp.y);
path.cubicTo(p3.x, p3.y, p4.x, p4.y, endp.x, endp.y);
canvas.drawPath(path, mPaint);
}
}

private void drawLine(Canvas canvas)
{
Point startp = new Point();
Point endp = new Point();
for (int i = 0; i < mPoints.length - 1; i++)
{
startp = mPoints[i];
endp = mPoints[i + 1];
canvas.drawLine(startp.x, startp.y, endp.x, endp.y, mPaint);
}
}

private void drawText(String text, int x, int y, Canvas canvas)
{
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setTextSize(dip2px(12));
p.setColor(res.getColor(R.color.color_999999));
p.setTextAlign(Paint.Align.LEFT);
canvas.drawText(text, x, y, p);
}

private Point[] getPoints()
{
Point[] points = new Point[yRawData.size()];
for (int i = 0; i < yRawData.size(); i++)
{
int ph = bheight - (int) (bheight * (yRawData.get(i) / maxValue));

points[i] = new Point(xList.get(i), ph + marginTop);
}
return points;
}

public void setData(ArrayList<Double> yRawData, ArrayList<String> xRawData, int maxValue, int averageValue)
{
this.maxValue = maxValue;
this.averageValue = averageValue;
this.mPoints = new Point[yRawData.size()];
this.xRawDatas = xRawData;
this.yRawData = yRawData;
this.spacingHeight = maxValue / averageValue;
}

public void setTotalvalue(int maxValue)
{
this.maxValue = maxValue;
}

public void setPjvalue(int averageValue)
{
this.averageValue = averageValue;
}

public void setMargint(int marginTop)
{
this.marginTop = marginTop;
}

public void setMarginb(int marginBottom)
{
this.marginBottom = marginBottom;
}

public void setMstyle(Linestyle mStyle)
{
this.mStyle = mStyle;
}

public void setBheight(int bheight)
{
this.bheight = bheight;
}

/**
* 根據手機的解析度從 dp 的單位 轉成為 px(像素)
*/
private int dip2px(float dpValue)
{
return (int) (dpValue * dm.density + 0.5f);
}

}

『貳』 android view怎樣刷新

兩種方式刷新:

  1. 主線程可以直接調用Invalidate()方法刷新

  2. 子線程可以直接調用postInvalidate()方法刷新。

  3. API的描述是這樣的 :Invalidatethe whole view. If the view is visible, onDraw(Canvas) will be called at somepoint in the future. This must be called from a UI thread. To call from anon-UI thread, call postInvalidate().。當Invalidate()被調用的時候,View的OnDraw()就會被調用,Invalidate()必須是在UI線程中被調用,如果在新線程中更新視圖的就調用postInvalidate()。

『叄』 android動態載入view一個一個刷新怎麼實現

先看一下結構圖

可以看到ViewSwitcher和ViewFlipper都是繼承自ViewAnimator。


下面通過一個Demo了解一下ViewFlipper的用法

main.xml

Html代碼

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="htt p:/ /schemas.andro id.co m/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<ViewFlipper

android:id="@+id/viewFlipper"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<include

android:id="@+id/layout01"

layout="@layout/layout01" />

<include

android:id="@+id/layout02"

layout="@layout/layout02" />

</ViewFlipper>

</LinearLayout>


layout01.xml

Html代碼

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="htt p:/ /schem as.andro id.c om/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center"

android:text="一個TextView"

android:textSize="40dip" />

</LinearLayout>


layout02.xml

Html代碼

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="htt p://schema s.andro id.c om/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center"

android:orientation="vertical" >

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/ic_launcher" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="一個TextView + 一個ImageView"

android:textSize="20dip" />

</LinearLayout>

</LinearLayout>


ViewFlipperDemoActivity.java

Java代碼

package com.tianjf;

import android.app.Activity;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnTouchListener;

import android.view.animation.AnimationUtils;

import android.widget.ViewFlipper;

public class ViewFlipperDemoActivity extends Activity implements

OnTouchListener {

private ViewFlipper viewFlipper;

// 左右滑動時手指按下的X坐標

private float touchDownX;

// 左右滑動時手指松開的X坐標

private float touchUpX;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);

viewFlipper.setOnTouchListener(this);

}


}

float XFrom = e1.getX();

float XTo = e2.getX();

float YFrom = e1.getY();

float YTo = e2.getY();

// 左右滑動的X軸幅度大於100,並且X軸方向的速度大於100

if (Math.abs(XFrom - XTo) > 100.0f && Math.abs(speedX) > 100.0f) {

// X軸幅度大於Y軸的幅度

if (Math.abs(XFrom - XTo) >= Math.abs(YFrom - YTo)) {

if (XFrom > XTo) {

// 下一個

mOnFlingListener.flingToNext();

} else {

// 上一個

mOnFlingListener.flingToPrevious();

}

}

} else {

return false;

}

return true;

}

public interface OnFlingListener {

void flingToNext();

void flingToPrevious();

}

}


MyViewFlipper.java

Java代碼

package com.tianjf;

import com.tianjf.MyGestureListener.OnFlingListener;

import android.content.Context;

import android.util.AttributeSet;

import android.view.GestureDetector;

import android.view.MotionEvent;

import android.view.View;

import android.widget.ViewFlipper;

public class MyViewFlipper extends ViewFlipper implements OnFlingListener {

private GestureDetector mGestureDetector = null;

private OnViewFlipperListener mOnViewFlipperListener = null;

public MyViewFlipper(Context context) {

super(context);

}

public MyViewFlipper(Context context, AttributeSet attrs) {

super(context, attrs);

}

public void setOnViewFlipperListener(OnViewFlipperListener mOnViewFlipperListener) {

this.mOnViewFlipperListener = mOnViewFlipperListener;

MyGestureListener myGestureListener = new MyGestureListener();

myGestureListener.setOnFlingListener(this);

mGestureDetector = new GestureDetector(myGestureListener);

}

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

if (null != mGestureDetector) {

return mGestureDetector.onTouchEvent(ev);

} else {

return super.onInterceptTouchEvent(ev);

}

}

@Override

public void flingToNext() {

if (null != mOnViewFlipperListener) {

int childCnt = getChildCount();

if (childCnt == 2) {

removeViewAt(1);

}

addView(mOnViewFlipperListener.getNextView(), 0);

if (0 != childCnt) {

setInAnimation(getContext(), R.anim.left_slip_in);

setOutAnimation(getContext(), R.anim.left_slip_out);

setDisplayedChild(0);

}

}

}

@Override

public void flingToPrevious() {

if (null != mOnViewFlipperListener) {

int childCnt = getChildCount();

if (childCnt == 2) {

removeViewAt(1);

}

addView(mOnViewFlipperListener.getPreviousView(), 0);

if (0 != childCnt) {

setInAnimation(getContext(), R.anim.right_slip_in);

setOutAnimation(getContext(), R.anim.right_slip_out);

setDisplayedChild(0);

}

}

}

public interface OnViewFlipperListener {

View getNextView();

View getPreviousView();

}

}


ViewFlipperDemoActivity.java

Java代碼

package com.tianjf;

import com.tianjf.MyViewFlipper.OnViewFlipperListener;

import android.app.Activity;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.ScrollView;

import android.widget.TextView;

public class ViewFlipperDemoActivity extends Activity implements OnViewFlipperListener {

private MyViewFlipper myViewFlipper;

private int currentNumber;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

currentNumber = 1;

myViewFlipper = (MyViewFlipper) findViewById(R.id.myViewFlipper);

myViewFlipper.setOnViewFlipperListener(this);

myViewFlipper.addView(creatView(currentNumber));

}

@Override

public View getNextView() {

currentNumber = currentNumber == 10 ? 1 : currentNumber + 1;

return creatView(currentNumber);

}

@Override

public View getPreviousView() {

currentNumber = currentNumber == 1 ? 10 : currentNumber - 1;

return creatView(currentNumber);

}

private View creatView(int currentNumber) {

LayoutInflater layoutInflater = LayoutInflater.from(this);

ScrollView resultView = (ScrollView) layoutInflater.inflate(R.layout.flipper_view, null);

((TextView) resultView.findViewById(R.id.textView)).setText(currentNumber + "");

return resultView;

}

}


好了,代碼上完了,開始講解!

ViewFilpper的showPrevious()方法和showNext()方法是用來顯示已經在布局文件中定義好了的View,現在我們沒有在布局文件中為ViewFlipper添加View,那麼showPrevious()方法和showNext()方法就不能用了。但是我們怎麼實現滑動來切換View呢?用什麼方法呢?

這時候,我們就要自定義一個MyViewFlipper來監聽滑動事件,並做切換視圖的處理。

你可以讓MyViewFlipper實現OnTouchListener介面,然後實現onTouch方法,然後根據MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP的坐標判斷是不是滑動事件,就像ImageSwitcher中講解的那樣(htt p://bl og.csd n.n et/tianjf0514/article/details/7556487)

除了自己判斷是不是滑動事件,那麼Android有沒有直接提供哪個方法作為滑動事件的回調函數呢?答案是:提供了。OnGestureListener中的onFling方法就是滑動事件的回調函數。這時候你也許會毫不猶豫的讓MyViewFlipper實現OnGestureListener介面,並復寫onFling方法。這樣做當然可以,不過實現OnGestureListener介面不僅僅要復寫onFling方法,還要復寫其他的方法(onDown()、onShowPress()、onSingleTapUp()、onScroll()、onLongPress()),但是這些回調函數我們不需要,這就造成了垃圾代碼。

為了避免垃圾代碼,Android提供了一個類SimpleOnGestureListener已經實現了OnGestureListener介面和OnDoubleTapListener介面,並復寫了所有方法。那麼我們只要新建一個自己的MyGestureListener.java來繼承SimpleOnGestureListener,並有選擇性的復寫需要的方法(我們在此只復寫onFling方法)。

這時,我們就自定義了一個手勢類,並且這個手勢類會監聽滑動事件來做一些處理。但是我們怎麼利用這個手勢類呢?怎麼利用到MyViewFlipper類中去呢?

關於onFling方法,有一點要注意:不是每個View都能有onFling回調函數,一開始,我的flipper_view.xml布局文件最外層是一個LinearLayout,死活都走不到onFling方法,後來在外層又套了一個ScrollView,就能正常走到OnFling方法裡面了。

可以看到flingToNext方法和flingToPrevious方法裡面會判斷childCnt,如果為2,就removeViewAt(1);,然後再addView(mOnViewFlipperListener.getNextView(), 0);。這就要回顧一下ImageSwitcher的原理,ViewFlipper的原理和ImageSwitcher一樣,有且僅有2個子View,滑動時候就在這兩個子View上來回切換。index為0的就是當前看到的,index為1的就是看不見的。上面代碼的意思就是:當滑動時,必然要新添加一個View,那麼子View的個數有可能大於2,隨意要先判斷一下如果childCnt == 2,那麼就把index == 1的那個View(即看不見的View)給Remove調,然後把新添加的View添加到index == 0處。這樣可以減少內存消耗。

『肆』 android view 怎麼局部刷新

開線程 用handle 進行刷新 想刷哪塊就刷那塊。
Handler

// 在onCreate()中開啟線程

new Thread(new GameThread()).start();、

// 實例化一個handler

Handler myHandler = new Handler()

{

//接收到消息後處理

public void handleMessage(Message msg)

{

switch (msg.what)

{

case Activity01.REFRESH:

mGameView.invalidate(); //刷新界面

break;

}

super.handleMessage(msg);

}

};

class GameThread implements Runnable

{

public void run()

{

while (!Thread.currentThread().isInterrupted())

{

Message message = new Message();

message.what = Activity01.REFRESH;

//發送消息

Activity01.this.myHandler.sendMessage(message);

try

{

Thread.sleep(100);

}

catch (InterruptedException e)

{

Thread.currentThread().interrupt();

}

}

}

}

『伍』 如何實現動態刷新android imgview的內容

你的問題應該是要動態生成空間吧。
下面的答案可以參考下。
首先要卻這個界面的布局,是AbsoluteLayout,RelativeLayout還是其他,然後就可以再裡面添加控制項了:
public
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
//確定界面的布局
AbsoluteLayout
abslayout=new
AbsoluteLayout
(this);
setContentView(abslayout);
//創建一個button按鈕
Button
btn1
=
new
Button(this);
btn1.setText(」this
is
a
button」);
btn1.setId(1);
//確定這個控制項的大小和位置
AbsoluteLayout.LayoutParams
lp1
=
new
AbsoluteLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
0,100);
abslayout.addView(btn1,
lp1
);
}
一個界面可以布置一個布局,可以多個布局一起設計:
public
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
//設置界面的布局
RelativeLayout
relativeLayout
=
new
RelativeLayout(this);
setContentView(relativeLayout);
//添加一個AbsoluteLayout子布局,並給這個布局添加一個button
AbsoluteLayout
abslayout=new
AbsoluteLayout
(this);
abslayout.setId(11);
Button
btn1
=
new
Button(this);
btn1.setText(」this
is
a
abslayout
button」);
btn1.setId(1);
AbsoluteLayout.LayoutParams
lp0
=
new
AbsoluteLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,100,0);
abslayout.addView(btn1,
lp0
);
//將這個子布局添加到主布局中
RelativeLayout.LayoutParams
lp1
=
new
RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp1.addRule(RelativeLayout.CENTER_HORIZONTAL,
RelativeLayout.TRUE);
relativeLayout.addView(abslayout
,lp1);
//再添加一個子布局
RelativeLayout
relativeLayout1
=
new
RelativeLayout(this);
Button
btn2
=
new
Button(this);
btn2.setText(」this
is
a
relativeLayout1
button」);
btn2.setId(2);
RelativeLayout.LayoutParams
lp2
=
new
RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp2.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp2.addRule(RelativeLayout.CENTER_HORIZONTAL,
RelativeLayout.TRUE);
relativeLayout1.addView(btn2
,lp2);
//將這個布局添加到主布局中
RelativeLayout.LayoutParams
lp11
=
new
RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp11.addRule(RelativeLayout.BELOW
,11);
relativeLayout.addView(relativeLayout1
,lp11);
}

『陸』 Android 怎麼實現支持所有View的通用的下拉刷新控制項

下拉刷新對於一個app來說是必不可少的一個功能,在早期大多數使用的是chrisbanes的PullToRefresh,或是修改自該框架的其他庫。而到現在已經有了更多的選擇,github上還是有很多體驗不錯的下拉刷新。
而下拉刷新主要有兩種實現方式:
1. 在ListView中添加header和footer,監聽ListView的滑動事件,動態設置header/footer的高度,但是這種方式只適用於ListView,RecyclerView。
2. 第二種方式則是繼承ViewGroup或其子類,監聽事件,通過scroll或Layout的方式移動child。如圖(又分兩種情況)

Layout時將header放到屏幕外面,target則填充滿屏幕。這個也是SwipeRefreshLayout的實現原理(第二種,只下拉header)

這兩種(指的是繼承ListView或繼承ViewGroup)下拉刷新的實現方式主要有以下區別

繼承ListView/RecyclerView

繼承ViewGroup或其子類

適用范圍
ListView/Recycler
理論支持所有View和ViewGroup

載入更多
實現簡單,體驗好
可以實現,看需求了,做不出ListView那種載入效果的,體驗比較一般

多點觸控
可以完美支持
header下拉狀態中是完美支持的,但是回去之後,很難將多點觸控事件傳遞給child

案例
QQ好友列表
美團、京東等

而今天,我打算先講第二種方式實現方式,繼承ViewGroup,代碼可以直接參考SwipeRefreshLayout,或者pullToRefresh,或者ultra-pull-to-refresh

一、思考和需求

下拉刷新需要幾個狀態:Reset–> Pull – > Refreshing – >Completed –>Reset

為了應對各式各樣的下拉刷新設計,我們應該提供設置自定義的Header,開發者可以通過實現介面從而自定義自己的header。

而且header可以有兩種顯示方式,一種是只下拉header,另外一種則是header和target一起下拉。

二、著手實現代碼

『柒』 android開發怎麼刷新 scrollview

代碼很簡單,但是很實用,適合在一個Activity中要刷新局部的UI,比如在掃描一維碼的時候,要把每次掃描的結果都顯示在界面上

  1. 創建一個包含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;

}

}

『捌』 android webview怎麼實現下拉刷新

這個就需要你判斷下拉的位置了,需要用到事件流的分發,oninterrupttouchevent(),具體的名字記不住了,你打一下就會出來,如果位置是從最上方開始的,把這個下拉時間分給下拉刷新處理,如果不是,就給webview處理。思想就是這個思想,代碼自己寫。記得更清楚。

閱讀全文

與android如何刷新view相關的資料

熱點內容
megawin單片機 瀏覽:685
以色列加密貨幣監督 瀏覽:907
程序員前端現在怎麼樣 瀏覽:497
伺服器和介面地址ping不通 瀏覽:555
linux命令返回上級目錄 瀏覽:897
移動花卡寶藏版為什麼不能選免流app 瀏覽:255
速騰carplay怎麼用安卓 瀏覽:13
紅塔銀行app怎麼樣 瀏覽:564
農行app怎麼開網銀 瀏覽:651
java迭代器遍歷 瀏覽:303
閩政通無法請求伺服器是什麼 瀏覽:48
怎麼做積木解壓神器 瀏覽:205
王者榮耀解壓玩具抽獎 瀏覽:49
12位是由啥加密的 瀏覽:870
程序員編迷你世界代碼 瀏覽:897
php取現在時間 瀏覽:248
單片機高吸收 瀏覽:429
怎麼區分五代頭是不是加密噴頭 瀏覽:246
hunt測試伺服器是什麼意思 瀏覽:510
2013程序員考試 瀏覽:641