导航:首页 > 操作系统 > 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相关的资料

热点内容
服务器和接口地址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
毕业论文是pdf 浏览:736
服务器跑网心云划算吗 浏览:471
单片机定时器计数初值的计算公式 浏览:801