分页: 5/9 第一页 上页 1 2 3 4 5 6 7 8 9 下页 最后页 [ 显示模式: 摘要 | 列表 ]
代码是参考某位仁兄的片段,以下是可行的完整测试代码:

package com.aslibra.test;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.widget.ImageView;

public class test extends Activity {
  ImageView iv;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    iv = (ImageView) this.findViewById(R.id.ImageView01);
    iv.post(new Runnable()
    {
      public void run()
      {
        viewInited();
      }
    }
    );
    Log.v("test", "== ok ==");
  }

  private void viewInited(){
    Rect rect= new Rect();
    Window window= getWindow();
    iv.getWindowVisibleDisplayFrame(rect);
    int statusBarHeight= rect.top;
    int contentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
    int titleBarHeight= contentViewTop - statusBarHeight;
    //测试结果:ok之后 100多 ms 才运行了
    Log.v("test", "=-init-= statusBarHeight="+statusBarHeight+
        " contentViewTop="+contentViewTop+
        " titleBarHeight="+titleBarHeight);    
  }
  
  /*
   * 07-14 02:36:48.449: VERBOSE/test(1385): == ok ==
   * 07-14 02:36:48.558: VERBOSE/test(1385): =-init-= statusBarHeight=25 contentViewTop=50 titleBarHeight=25
   */
}


参考信息:
Getting Height of Status and Title Bar
Tags:
在上篇 android处理单击双击和滑动事件 里有介绍双击,可如果需要自己控制一个双击事件的单击间隔时间,怎么弄呢?
其实就是在单击之后,在间隔时间内等候下次点击再次发生,我们可以用线程处理等候时间,如果时间到了还没有下个点击,那就是取消双击的可能了,可以参考下面的代码:

package com.aslibra.test;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.LinearLayout;
import android.widget.TextView;

/*
* 自定义双击等待时间
* http://www.aslibra.com/blog/post/android_doubleClick.php
*/
public class touchGesture extends Activity implements OnGestureListener {      
  private LinearLayout main;      
  private TextView viewA;
  private boolean waitDoubleClick = false;
  private static final int DOUBLE_CLICK_TIME = 350;

  private GestureDetector gestureScanner;

  @Override  
  public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  

    gestureScanner = new GestureDetector(this);  

    main = new LinearLayout(this);  
    main.setBackgroundColor(Color.GRAY);
    main.setLayoutParams(new LinearLayout.LayoutParams(320,480));
    main.setOrientation(LinearLayout.VERTICAL);

    viewA = new TextView(this);
    viewA.setBackgroundColor(Color.YELLOW);
    viewA.setTextColor(Color.BLACK);  
    viewA.setTextSize(16);
    viewA.setLayoutParams(new LinearLayout.LayoutParams(320,50));  
    main.addView(viewA);

    setContentView(main);  
  }

  @Override  
  public boolean onTouchEvent(MotionEvent me) {  
    return gestureScanner.onTouchEvent(me);  
  }  

  @Override  
  public boolean onDown(MotionEvent e) {  
    //viewA.setText("-" + "DOWN" + "-");  
    return true;  
  }  

  @Override  
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {  
    //viewA.setText("-" + "FLING" + "- "+velocityX + "- "+velocityY);  
    Log.v("test", "onFling "+e1.getX()+" "+e2.getX());
    return true;  
  }  

  @Override  
  public void onLongPress(MotionEvent e) {  
    //viewA.setText("-" + "LONG PRESS" + "-");  
  }  

  @Override  
  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {  
    //viewA.setText("-" + "SCROLL" + "- "+distanceX + "- "+distanceY);  
    Log.v("test", "onScroll "+e1.getX()+" "+e2.getX());
    return true;  
  }  

  @Override  
  public void onShowPress(MotionEvent e) {  
    //viewA.setText("-" + "SHOW PRESS" + "-");  
  }

  @Override  
  public boolean onSingleTapUp(MotionEvent e) {  
    //viewA.setText("-" + "SINGLE TAP UP" + "-"+ i++);  
    Log.v("test", "onSingleTapUp "+e.getX()+" "+e.getY());
    if(!waitDoubleClick){
      waitDoubleClick = true;
      Log.v("test", "waitDoubleClick");
      //等待下次点击
      Thread checkUpdate = new Thread() {    
        public void run() {
          //固定时间后如果还没有改变状态,说明是单击,取消等待状态
          try {
            sleep( DOUBLE_CLICK_TIME );
            if(waitDoubleClick){
              waitDoubleClick = false;
              Log.v("test", "cancle waitDoubleClick");
            }
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }  
      };
      checkUpdate.start();  
      viewA.setText("");
    }else{
      //双击
      waitDoubleClick = false;
      onDoubleClick();
    }
    return true;  
  }  

  //双击事件
  private void onDoubleClick(){
    viewA.setText("dobule click");
    Log.v("test", "DoubleClick");      
  }
  
  
}
  

Tags:
android有处理鼠标动作的GestureDetector,使用起来也挺方便,几个常用事件你都可以找到接口接入处理:

单击、双击(比如双击放大)、滑动(比如翻页)
下面是简化的例子,参考并整合所得,来源参考页尾参考内容:

package com.aslibra.test;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.LinearLayout;
import android.widget.TextView;

public class touchGesture extends Activity implements OnGestureListener {      
  private LinearLayout main;      
  private TextView viewA;
  private GestureDetector gestureScanner;

  @Override  
  public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  

    gestureScanner = new GestureDetector(this);  
    gestureScanner.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener(){  
      public boolean onDoubleTap(MotionEvent e) {  
        viewA.setText("-" + "onDoubleTap" + "-");  
        //双击时产生一次
        Log.v("test", "onDoubleTap");
        return false;  
      }
      public boolean onDoubleTapEvent(MotionEvent e) {  
        //双击时产生两次
        Log.v("test", "onDoubleTapEvent");
        return false;
      }  
      public boolean onSingleTapConfirmed(MotionEvent e) {  
        viewA.setText("-" + "onSingleTapConfirmed" + "-");  
        //短快的点击算一次单击
        Log.v("test", "onSingleTapConfirmed");
        return false;  
      }  
    });


    main = new LinearLayout(this);  
    main.setBackgroundColor(Color.GRAY);
    main.setLayoutParams(new LinearLayout.LayoutParams(320,480));
    main.setOrientation(LinearLayout.VERTICAL);

    viewA = new TextView(this);
    viewA.setBackgroundColor(Color.YELLOW);
    viewA.setTextColor(Color.BLACK);  
    viewA.setTextSize(16);
    viewA.setLayoutParams(new LinearLayout.LayoutParams(320,50));  
    main.addView(viewA);

    setContentView(main);  
  }

  @Override  
  public boolean onTouchEvent(MotionEvent me) {  
    return gestureScanner.onTouchEvent(me);  
  }  

  @Override  
  public boolean onDown(MotionEvent e) {  
    //viewA.setText("-" + "DOWN" + "-");  
    return true;  
  }  

  @Override  
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {  
    //viewA.setText("-" + "FLING" + "- "+velocityX + "- "+velocityY);  
    Log.v("test", "onFling "+e1.getX()+" "+e2.getX());
    return true;  
  }  

  @Override  
  public void onLongPress(MotionEvent e) {  
    //viewA.setText("-" + "LONG PRESS" + "-");  
  }  

  @Override  
  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {  
    //viewA.setText("-" + "SCROLL" + "- "+distanceX + "- "+distanceY);  
    Log.v("test", "onScroll "+e1.getX()+" "+e2.getX());
    return true;  
  }  

  @Override  
  public void onShowPress(MotionEvent e) {  
    //viewA.setText("-" + "SHOW PRESS" + "-");  
  }

  @Override  
  public boolean onSingleTapUp(MotionEvent e) {  
    Log.v("test", "onSingleTapUp");
    //viewA.setText("-" + "SINGLE TAP UP" + "-"+ i++);  
    return true;  
  }  
  
}  


参考资料:

1 GestureDetector and GestureDetector.OnGestureListener
2 how to implement android double tap?
Tags:
android程序如果需要全屏或者去掉标题栏,则可以在oncreate开始处,在未处理layout前加上:

protected void onCreate(Bundle savedInstanceState) {

  //不显示标题栏
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  //全屏,不显示信息栏
  //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN ,
  //              WindowManager.LayoutParams.FLAG_FULLSCREEN);

  super.onCreate(savedInstanceState);
  ....


今天处理了时间戳的问题,sqlite里面没有自动更新的timestamp字段,需要自己更新:

private void updateArticle(long aId) {
  //取得时间戳
  long timestamp = System.currentTimeMillis()/1000;
  String sql = "update aslibra_article set lastTime='"+timestamp+"' where aId = "+aId;
  mDb.execSQL(sql);
}


另外一个不同语言的时间戳的方法

引用
To Get Unix timestamp value in seconds

java:

long timestamp = System.currentTimeMillis()/1000

Python:

import time
timestamp = int(time.time())

Erlang:

{Mega, Secs, _} = now(),
Timestamp = Mega*1000000 + Secs,

Working with timestamps in MySQL

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
mysql> SELECT FROM_UNIXTIME(1111885200);
+---------------------------+
| FROM_UNIXTIME(1111885200) |
+---------------------------+
| 2005-03-27 03:00:00 |
+---------------------------+
Tags:
这个例子很简单,打开线程处理任务变得很轻松:

final ProgressDialog dialog = ProgressDialog.show(this, "Title", "Message", true);
final Handler handler = new Handler() {
   public void handleMessage(Message msg) {
      dialog.dismiss();
      }
   };
Thread checkUpdate = new Thread() {  
   public void run() {
//
// YOUR LONG CALCULATION (OR OTHER) GOES HERE
//
      handler.sendEmptyMessage(0);
      }
   };
checkUpdate.start();


原文:Display a progress dialog while computing
Tags: , ,
在PHP中,我习惯转换xml为数组,在android里面,我也喜欢这样,可以分配到map类型。
先看看示例数据:

<?xml version="1.0" encoding="UTF-8"?>
<list>
  <site id="65" url="http://www.aslibra.com" >阿权的书房</site>
  <site id="5" url="http://www.google.com" >谷歌</site>
</list>


我们可以用一个Map类型的变量保存最后的结果:

Map<Integer,Map<String,String>> sites = new HashMap<Integer,Map<String,String>>();

try{
  String myurl = "http://www.aslibra.com/teach/android/sites.xml";
  URL url = new URL(myurl);
  HttpURLConnection conn;
  conn = (HttpURLConnection) url.openConnection();
  conn.setDoInput(true);
  conn.connect();
  InputStream is = conn.getInputStream();
  DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();
  Document doc = builder.parse(is);
  
  NodeList nl = doc.getElementsByTagName("site");
  int sites_number = nl.getLength();
  
  for (int i=0; i<sites_number; i++){
    Node mysite = doc.getElementsByTagName("site").item(i);
    Map<String,String> sitesChild = new HashMap<String,String>();
    sitesChild.put("siteName", mysite.getFirstChild().getNodeValue());
    for(int j=0;j<mysite.getAttributes().getLength();j++){
      sitesChild.put( mysite.getAttributes().item(j).getNodeName(),
          mysite.getAttributes().item(j).getNodeValue() );
    }
    sites.put(i, sitesChild);
  }

}catch(Exception e){
  //Log.e(tag, e.toString() );
}
Log.d(tag, "size:"+sites.size() );


简单的分析一下:

取得xml里site的所有节点 doc.getElementsByTagName("site")
取得某个子节点 doc.getElementsByTagName("site").item(i)
取得节点包含的字符串 mysite.getFirstChild().getNodeValue()
取得属性值 mysite.getAttributes().item(j).getNodeName()
取得属性的值 mysite.getAttributes().item(j).getNodeValue()

这有点复杂,貌似我也不习惯,可记住之后,自己就知道怎么取xml值了,一般xml有如下类型

<A B="C">D</A>


根据A取得此小段,D是此段的getFirstChild().getNodeValue()
B是此段的getAttributes().item(j).getNodeName()
C是此段的getAttributes().item(j).getNodeValue()
当然,有多个,那就循环一下即可

最终得到类似php数组类型,可以自己遍历来用:

Map<Integer,Map<String,String>> sites = XXXX(前面的处理返回值);
int len = sites.size();
Map<String,String> row;
for(int i=0;i<len;i++){
  row = sites.get(i);
  //比如row.get("url")
}
Tags: , ,
看着网上教程做的,可以参考附录的文章,这里简单说明一些体会:

1 注册admob账号,忽略

2 添加一个网站/程序,添加后,会有一个文件下载提示,下载回来就是范例和jar等文件,并且会提示你 Publisher ID

3 工程导入该jar文件,可以使用external jar,不用放工程目录的

4 添加attrs.xml,主要是adview的样式,如果添加后说找不到某个key,那可能是这里没有定义

5 修改 AndroidManifest.xml
主要是添加Publisher ID和允许互联网访问

<meta-data android:value="a14bd55de1982dd" android:name="ADMOB_PUBLISHER_ID" />
    </application>
    <uses-sdk android:minSdkVersion="3" />
  <uses-permission android:name="android.permission.INTERNET" />


6 添加一个AdView到你的界面
这里注意的是前面的 xmlns
Tags: , ,
分页: 5/9 第一页 上页 1 2 3 4 5 6 7 8 9 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐