加载中
很好 2012/12/28 10:58 回答了问题: android gridview 左右滑动的一个问题

package com.example.usawather;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.Scroller;

/**
 * 仿Launcher中的WorkSapce,可以左右滑动切换屏幕的类
 *
 */
public class ScrollLayout extends ViewGroup {

 //private static final String TAG = "ScrollLayout";
 private Scroller mScroller;
 private VelocityTracker mVelocityTracker;

 private int mCurScreen;
 private int mDefaultScreen = 0;

 private static final int TOUCH_STATE_REST = 0;
 private static final int TOUCH_STATE_SCROLLING = 1;

 private static final int SNAP_VELOCITY = 600;

 private int mTouchState = TOUCH_STATE_REST;
 private int mTouchSlop;
 private float mLastMotionX;
 private float mLastMotionY;

 private int currentScreenIndex = 0;

 public int getCurrentScreenIndex() {
  return currentScreenIndex;
 }

 public void setCurrentScreenIndex(int currentScreenIndex) {
  this.currentScreenIndex = currentScreenIndex;
 }

 public ScrollLayout(Context context, AttributeSet attrs) {
  this(context, attrs, 0);
  // TODO Auto-generated constructor stub
 }

 public ScrollLayout(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  // TODO Auto-generated constructor stub
  mScroller = new Scroller(context);
  mCurScreen = mDefaultScreen;
  mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
 }

 @Override
 protected void onLayout(boolean changed, int l, int t, int r, int b) {
  // TODO Auto-generated method stub
 
  int childLeft = 0;
  final int childCount = getChildCount();
 System.out.println("onLayout  childCount=" + childCount);
  for (int i = 0; i < childCount; i++) {
   final View childView = getChildAt(i);
   //System.out.println("得到视图:"+childView);
   if (childView.getVisibility() != View.GONE) {
    final int childWidth = childView.getMeasuredWidth();
    System.out.println("得到视图下面的。。。。"+childLeft+"/"+childWidth+"/"+childView.getMeasuredHeight());
    childView.layout(childLeft, 0, childLeft + childWidth,
      childView.getMeasuredHeight());
    
    childLeft += childWidth;
    System.out.println("。。好的。"+childLeft);
   }
  }
 }

 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
 // Log.e(TAG, "onMeasure");
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  final int width = MeasureSpec.getSize(widthMeasureSpec);
  final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
  /*if (widthMode != MeasureSpec.EXACTLY) {
   throw new IllegalStateException(
     "ScrollLayout only canmCurScreen run at EXACTLY mode!");
  }
*/
  final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
  /*if (heightMode != MeasureSpec.EXACTLY) {
   throw new IllegalStateException(
     "ScrollLayout only can run at EXACTLY mode!");
  }*/

  // The children are given the same width and height as the scrollLayout
  final int count = getChildCount();
  for (int i = 0; i < count; i++) {
   getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
  }
 // System.out.println("moving to screen " + mCurScreen);
  scrollTo(mCurScreen * width, 0);
 }

 /**
  * According to the position of current layout scroll to the destination
  * page.
  */
 public void snapToDestination() {
  final int screenWidth = getWidth();
  final int destScreen = (getScrollX() + screenWidth / 2) / screenWidth;
  snapToScreen(destScreen);
 }

 public void snapToScreen(int whichScreen) {
  // get the valid layout page
  whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));
  if (getScrollX() != (whichScreen * getWidth())) {

   final int delta = whichScreen * getWidth() - getScrollX();
   mScroller.startScroll(getScrollX(), 0, delta, 0,
     Math.abs(delta) * 2);
   mCurScreen = whichScreen;
   invalidate(); // Redraw the layout
  }
 }

 public void setToScreen(int whichScreen) {
  whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));
  mCurScreen = whichScreen;
  scrollTo(whichScreen * getWidth(), 0);
 }

 public int getCurScreen() {
  return mCurScreen;
 }

 @Override
 public void computeScroll() {
  // TODO Auto-generated method stub
  if (mScroller.computeScrollOffset()) {
   scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
   postInvalidate();
  }
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  // TODO Auto-generated method stub

  if (mVelocityTracker == null) {
   mVelocityTracker = VelocityTracker.obtain();
  }
  mVelocityTracker.addMovement(event);

  final int action = event.getAction();
  final float x = event.getX();
  final float y = event.getY();

  switch (action) {
  case MotionEvent.ACTION_DOWN:
   //Log.e(TAG, "event down!");
   if (!mScroller.isFinished()) {
    mScroller.abortAnimation();
   }
   mLastMotionX = x;
   break;

  case MotionEvent.ACTION_MOVE:
   int deltaX = (int) (mLastMotionX - x);
   mLastMotionX = x;

   scrollBy(deltaX, 0);
   break;

  case MotionEvent.ACTION_UP:
   //Log.e(TAG, "event : up");

   // if (mTouchState == TOUCH_STATE_SCROLLING) {
   final VelocityTracker velocityTracker = mVelocityTracker;
   velocityTracker.computeCurrentVelocity(1000);
   int velocityX = (int) velocityTracker.getXVelocity();

   //Log.e(TAG, "velocityX:" + velocityX);

   if (velocityX > SNAP_VELOCITY && mCurScreen > 0) {
    // Fling enough to move left
    //Log.e(TAG, "snap left");
    onScreenChangeListener.onScreenChange(mCurScreen - 1);
   // System.out.println("mCurScreen=" + (mCurScreen - 1));
    snapToScreen(mCurScreen - 1);
   } else if (velocityX < -SNAP_VELOCITY
     && mCurScreen < getChildCount() - 1) {
    // Fling enough to move right
    //Log.e(TAG, "snap right");
    onScreenChangeListener.onScreenChange(mCurScreen + 1);
    //只往右移动才加载数据
    onScreenChangeListenerDataLoad.onScreenChange(mCurScreen+1);
    snapToScreen(mCurScreen + 1);
   } else {
    snapToDestination();
   }

   if (mVelocityTracker != null) {
    mVelocityTracker.recycle();
    mVelocityTracker = null;
   }
   // }
   mTouchState = TOUCH_STATE_REST;
   break;
  case MotionEvent.ACTION_CANCEL:
   mTouchState = TOUCH_STATE_REST;
   break;
  }

  return true;
 }

 @Override
 public boolean onInterceptTouchEvent(MotionEvent ev) {
  // TODO Auto-generated method stub
  //Log.e(TAG, "onInterceptTouchEvent-slop:" + mTouchSlop);

  final int action = ev.getAction();
  if ((action == MotionEvent.ACTION_MOVE)
    && (mTouchState != TOUCH_STATE_REST)) {
   return true;
  }

  final float x = ev.getX();
  final float y = ev.getY();

  switch (action) {
  case MotionEvent.ACTION_MOVE:
   final int xDiff = (int) Math.abs(mLastMotionX - x);
   if (xDiff > mTouchSlop) {
    mTouchState = TOUCH_STATE_SCROLLING;

   }
   break;

  case MotionEvent.ACTION_DOWN:
   mLastMotionX = x;
   mLastMotionY = y;
   mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST
     : TOUCH_STATE_SCROLLING;
   break;

  case MotionEvent.ACTION_CANCEL:
  case MotionEvent.ACTION_UP:
   mTouchState = TOUCH_STATE_REST;
   break;
  }

  return mTouchState != TOUCH_STATE_REST;
 }

 //分页监听
 public interface OnScreenChangeListener {
  void onScreenChange(int currentIndex);
 }

 private OnScreenChangeListener onScreenChangeListener;

 public void setOnScreenChangeListener(
   OnScreenChangeListener onScreenChangeListener) {
  this.onScreenChangeListener = onScreenChangeListener;
 }
 
 
 //动态数据监听
 public interface OnScreenChangeListenerDataLoad {
  
  void onScreenChange(int currentIndex);
  
 }
 private OnScreenChangeListenerDataLoad onScreenChangeListenerDataLoad;

 public void setOnScreenChangeListenerDataLoad(OnScreenChangeListenerDataLoad onScreenChangeListenerDataLoad) {
 System.out.println("...........................111111111111111.........................");
  this.onScreenChangeListenerDataLoad = onScreenChangeListenerDataLoad;
 }

}

@很好
现在做了一个左右滑动的 我让他每页显示2个 一共显示四页 但是现在当我滑动到第四页的时候在刷新信息 怎么才能让他显...
很好 2012/12/24 09:53 回答了问题: 谁帮我解决一个关于gridview 刷新的问题
没有懂 你看看我是 这样写的int pageNo = (int)Math.ceil( lists.size()/APP_PAGE_SIZE);
    System.out.println("多少页:"+pageNo);
    for (int i = 0; i < pageNo; i++) {
     GridView appPage = new GridView(MainActivity.this);
     adapter=new GridViewAdapter(MainActivity.this, lists, i);
     appPage.setAdapter(adapter);
     appPage.setNumColumns(2);
     appPage.setOnItemClickListener(listener);
     adapter.notifyDataSetChanged();
     
     mScrollLayout.addView(appPage);
    }
    //加载分页
    pageControl = (PageControlView) findViewById(R.id.pageControl);
    pageControl.bindScrollViewGroup(mScrollLayout);
    //加载分页数据
    dataLoad.bindScrollViewGroup(mScrollLayout);
@很好
adapter.notifyDataSetChanged(); 我有些伤这句话 但是不知道为什么gridview里...
很好 2012/12/24 09:47 回答了问题: 谁帮我解决一个关于gridview 刷新的问题
数据已经传过去了 就是gridview里面的数据显示的还是原来的数据。。。 adapter.notifyDataSetChanged(); 刷新也没有用。。
@很好
adapter.notifyDataSetChanged(); 我有些伤这句话 但是不知道为什么gridview里...
楼主那  为什么你的这段代码 得不到当前的坐标啊  location是null
@鉴客
今天在Android项目中要实现一个通过GPS或NetWork来获取当前移动终端设备的经纬度功能。要实现该功能要用...
很好 2012/11/22 09:20 回答了问题: js的一个问题 谁帮解决一下那。。。
。。但是不可以哦。。
@很好
我现在的界面是如图的这种形式 请问 有谁知道怎么把界面换下形式 我想要的形式是 上面的日期是一行 图片是一行 星期...
很好 2012/11/22 09:20 回答了问题: js的一个问题 谁帮解决一下那。。。
那你能解决吗 这个问题。。我吧代码发上去了 可以帮着看看
@很好
我现在的界面是如图的这种形式 请问 有谁知道怎么把界面换下形式 我想要的形式是 上面的日期是一行 图片是一行 星期...
很好 2012/11/22 09:19 回答了问题: js的一个问题 谁帮解决一下那。。。
我在css里面添加了 还是不可以。。。布局显示的和原来的一样
@很好
我现在的界面是如图的这种形式 请问 有谁知道怎么把界面换下形式 我想要的形式是 上面的日期是一行 图片是一行 星期...
很好 2012/11/22 09:18 回答了问题: js的一个问题 谁帮解决一下那。。。
ody,table,tr,td {
 font-family: Arial, Helvetica, sans-serif;
 font-size: 12px;
 margin: 0px;
 padding: 0px;
 display: table-row-group;
}
</style>
 </head>
   <script type="text/javascript" src=" file:///android_asset/gov.Graphic.js"></script>
 <script type="text/javascript">
 function show(jsondata){
   var jsonobjs = eval(jsondata);
    alert("长度是多少你啊:");
   var table = document.getElementById("personTable");
   for(var y=0; y<jsonobjs.length; y++){
    var tr = table.insertRow(table.rows.length); //
    var td1 = tr.insertCell(0);
    var td2 = tr.insertCell(1);
    td2.align = "center";
    
    var td3 = tr.insertCell(2);
    td3.align = "center";
                
                var td4 = tr.insertCell(3);
    td4.align = "center";
                
                var td5 = tr.insertCell(4);
    td5.align = "center";
    td1.innerHTML =jsonobjs[y].riqi;
    td2.innerHTML ="<td><img width='50' height='50' src='file:///android_asset/images/"+jsonobjs[y].week_img+"'"+jsonobjs[y].week_img+"</img></td>";
    td3.innerHTML = jsonobjs[y].xingqi;
    td4.innerHTML = jsonobjs[y].tempMin;
    td5.innerHTML = jsonobjs[y].tempMax;
    
    }
  }
   
  </script>
 这是我写的。。。
@很好
我现在的界面是如图的这种形式 请问 有谁知道怎么把界面换下形式 我想要的形式是 上面的日期是一行 图片是一行 星期...
很好 2012/11/21 12:06 回答了问题: js 何如画出一周的天气曲线图
<script type="text/javascript">
 alert("长度是多少你啊:");
function show(jsondata) {
alert("长度是多少你啊:"+jsondata);
  var jsonobjs = eval(jsondata);
   alert("长度是多少你啊:"+jsonobjs);
   var table = document.getElementById("personTable");
   alert("长度是多少你啊:"+jsonobjs.length);
   for ( var i = 0; i < jsonobjs.length; i++) {
    var t_tr=document.createElement("tr");
    var t_td=document.createElement("td");
    t_tr.appendChild(t_td);
    t_td.innerHTML="<img src='file:///android_asset/images/"+jsonobjs[i].week_img+"'"+jsonobjs[i].week_img+"</img>";
    
   }
}
}这是我写的好像不对
@很好
js 何如画出一周的天气曲线图 L如图的效果: 星期1 星期2 星期3 星期4 星期5 星期6 曲线1 曲线2 日...
很好 2012/11/21 12:06 回答了问题: js 何如画出一周的天气曲线图
不过你可以帮我看看另外一个问题 就是我从外面解析出来七章图片要添加进来 怎么叫他横着依此排列那
@很好
js 何如画出一周的天气曲线图 L如图的效果: 星期1 星期2 星期3 星期4 星期5 星期6 曲线1 曲线2 日...
很好 2012/11/21 12:05 回答了问题: js 何如画出一周的天气曲线图
这样的控件是很多。。但是没有我想要的。。。我的饿js又不怎么好。。。
@很好
js 何如画出一周的天气曲线图 L如图的效果: 星期1 星期2 星期3 星期4 星期5 星期6 曲线1 曲线2 日...
回复 @鉴客 : create table USA(id integer primary key autoincrement ,province text,cityName text,provinceCode text) 这是我建立的表。。。
@很好
有个将近2万多条的数据库信息..其中有全国的所有的城市和省 请问谁知道怎么才能快速查询到这个城市的名字。。
在不在 在不在 我的这个问题还没有解决那。。..要怎么才可以快速查询到这么多的信息。。。那。。
@很好
有个将近2万多条的数据库信息..其中有全国的所有的城市和省 请问谁知道怎么才能快速查询到这个城市的名字。。

没有更多内容

加载失败,请刷新页面

返回顶部
顶部