当前位置: 编程技术>移动开发
本页文章导读:
▪jquery 取id以jq_开端,2,4结尾的对像 jquery 取id以jq_开头,2,4结尾的对像
$("div[id^='jq_'][id$='2']").add("div[id^='jq_'][id$='4']");
......
▪ 仿众人网右边可推出的效果(带拖动) 仿人人网右边可推出的效果(带拖动)
添加了拖动功能,按住小图标,拖动超过一半的时候打开,没到一半的时候关闭。只添加了OnGestureListener接口和OnTouchListener。具体代码看下面:
packag.........
▪ sencha touch2学习札记(三)-form表单容器及其子组件 sencha touch2学习笔记(三)----form表单容器及其子组件
原文链接:http://chennaigong.iteye.com/blog/1546309
sencha touch2封装了很多的UI组件,今天标记下学过的组件---formPanel。var formPanel=Ext.create(
它.........
[1]jquery 取id以jq_开端,2,4结尾的对像
来源: 互联网 发布时间: 2014-02-18
jquery 取id以jq_开头,2,4结尾的对像
$("div[id^='jq_'][id$='2']").add("div[id^='jq_'][id$='4']");
$("div[id^='jq_'][id$='2']").add("div[id^='jq_'][id$='4']");
[2] 仿众人网右边可推出的效果(带拖动)
来源: 互联网 发布时间: 2014-02-18
仿人人网右边可推出的效果(带拖动)
添加了拖动功能,按住小图标,拖动超过一半的时候打开,没到一半的时候关闭。只添加了OnGestureListener接口和OnTouchListener。
具体代码看下面:
其他都和这里的一样。
添加了拖动功能,按住小图标,拖动超过一半的时候打开,没到一半的时候关闭。只添加了OnGestureListener接口和OnTouchListener。
具体代码看下面:
package com.dl.test;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout.LayoutParams;
public class App extends Activity implements OnPanelStatusChangedListener,OnTouchListener,GestureDetector.OnGestureListener{
private boolean hasMeasured=false;
private LinearLayout layout_left;
private LinearLayout layout_right;
private ImageView iv;
private int layout_left_width,layout_right_width=0;
/**每次自动展开/收缩的范围*/
private int MAX_WIDTH=0;
/**每次自动展开/收缩的速度*/
private final static int SPEED=20;
private GestureDetector mGestureDetector;
private boolean isScrolling=false;
private float mScrollX;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
layout_left=(LinearLayout)findViewById(R.id.layout_left);
layout_right=(LinearLayout)findViewById(R.id.layout_right);
iv=(ImageView)findViewById(R.id.iv);
iv.setOnTouchListener(this);
//定义手势识别
mGestureDetector = new GestureDetector(this,this);
mGestureDetector.setIsLongpressEnabled(false);
calculatorWidth();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
@Override
public void onAttachedToWindow() {
// TODO Auto-generated method stub
super.onAttachedToWindow();
}
private void calculatorWidth(){
ViewTreeObserver observer = layout_right.getViewTreeObserver();
//为了取得控件的宽
// observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
// @Override
// public void onGlobalLayout() {
// if (hasMeasured == false){
// layout_right_width = layout_right.getMeasuredWidth();//105
// layout_left_width=layout_left.getMeasuredWidth();//480
// MAX_WIDTH=layout_left_width-layout_right_width;//375
// hasMeasured = true;
// }
// }
// });
//为了取得控件的宽
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
public boolean onPreDraw(){
if (hasMeasured == false){
layout_right_width = layout_right.getMeasuredWidth();
layout_left_width=layout_left.getMeasuredWidth();
MAX_WIDTH=layout_left_width-layout_right_width;
// Log.i("tag", "MAX_WIDTH=="+MAX_WIDTH);
hasMeasured = true;
//设置可拉动容器的宽为全屏(即不可拉动容器)的宽
View layout_max_width=findViewById(R.id.layout_max_width);
LinearLayout.LayoutParams lp=(LinearLayout.LayoutParams)layout_max_width.getLayoutParams();
lp.width=layout_left_width;
layout_max_width.setLayoutParams(lp);
}
return true;
}
});
}
class AsynMove extends AsyncTask<Integer, Integer, Void> {
@Override
protected Void doInBackground(Integer... params) {
int times;
if (MAX_WIDTH % Math.abs(params[0]) == 0)// 整除
times = MAX_WIDTH / Math.abs(params[0]);
else
times = MAX_WIDTH / Math.abs(params[0]) + 1;// 有余数
for (int i = 0; i < times; i++) {
publishProgress(params);
try {
Thread.sleep(Math.abs(params[0]));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... params) {
LayoutParams lp = (LayoutParams)layout_right.getLayoutParams();
if (params[0] < 0)
lp.leftMargin = Math.max(lp.leftMargin + params[0], 0);
else
lp.leftMargin = Math.min(lp.leftMargin + params[0], MAX_WIDTH);
if(lp.leftMargin<=0){//展开之后
onPanelOpened();//调用OPEN回调函数
}
else if(lp.leftMargin>=MAX_WIDTH){//收缩之后
onPanelClosed();//调用CLOSE回调函数
}
layout_right.setLayoutParams(lp);
}
}
@Override
public void onPanelOpened() {
// TODO Auto-generated method stub
// Log.i("tag", "=========onPanelOpened========");
}
@Override
public void onPanelClosed() {
// TODO Auto-generated method stub
// Log.i("tag", "=========onPanelClosed========");
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
mScrollX=0;
isScrolling=false;
return true;//需要返回ture才能触发onSingleTapUp
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
LayoutParams lp = (android.widget.RelativeLayout.LayoutParams)layout_right.getLayoutParams();
if (lp.leftMargin >=MAX_WIDTH)// CLOSE的状态
new AsynMove().execute(new Integer[] { -SPEED });// 负数展开
else if (lp.leftMargin >= 0)// OPEN的状态
new AsynMove().execute(new Integer[] { SPEED });// 正数收缩
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
isScrolling=true;
mScrollX+=distanceX;//distanceX:向左为正,右为负
LayoutParams lp = (LayoutParams)layout_right.getLayoutParams();
lp.leftMargin=lp.leftMargin-(int)mScrollX;
if(lp.leftMargin<=0){//展开之后
isScrolling=false;//拖过头了不需要再执行AsynMove了
lp.leftMargin=0;
onPanelOpened();//调用OPEN回调函数
}
if(lp.leftMargin>=MAX_WIDTH){//收缩之后
isScrolling=false;
lp.leftMargin=MAX_WIDTH;
onPanelClosed();//调用CLOSE回调函数
}
layout_right.setLayoutParams(lp);
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
//拖到一半放开手指时的运动
if(event.getAction()==MotionEvent.ACTION_UP && isScrolling==true){
LayoutParams lp=(LayoutParams) layout_right.getLayoutParams();
if (lp.leftMargin >= (MAX_WIDTH>>1)) {//往左没超过一半
new AsynMove().execute(new Integer[] { SPEED });
}
else{
new AsynMove().execute(new Integer[] { -SPEED });
}
}
return mGestureDetector.onTouchEvent(event);
}
}
其他都和这里的一样。
1 楼
weisi2375
2012-06-11
下来看看。 呵呵
2 楼
qi19901212
2012-06-20
没图片啊。望楼主添加
[3] sencha touch2学习札记(三)-form表单容器及其子组件
来源: 互联网 发布时间: 2014-02-18
sencha touch2学习笔记(三)----form表单容器及其子组件
原文链接:http://chennaigong.iteye.com/blog/1546309
sencha touch2封装了很多的UI组件,今天标记下学过的组件---formPanel。var formPanel=Ext.create(
它的包名为Ext.form.Panel。所以创建的时候代码如下:
"Ext.form.Panel",
{
fullscreen:true,
items:[
{}
]
})
items里可嵌套入很多组件,这里我嵌入了很基本的一些组件。代码如下:
Ext.application(
{
name:"sencha",
launch:function()
{
var spinner = Ext.create('Ext.field.Spinner', {
label: '步骤加1',
minValue: 0,
maxValue: 10,
increment: 2,
cycle: true
});
var formPanel=Ext.create(
"Ext.form.Panel",
{
fullscreen:true,
items:[
{
xtype:"fieldset",
items:[
{
xtype:"textfield",
name:"name",
label:"姓名"
},
{
xtype:"emailfield",
name:"email",
label:"邮箱"
},
{
xtype:"passwordfield",
name:"password",
label:"密码"
},
{
xtype: 'numberfield',
label: '数字',
minValue: 18,
maxValue: 150,
name: 'age'
},
{
xtype: 'radiofield',
name : 'color',
value: 'red',
label: '红色',
checked: true
},
{
xtype: 'radiofield',
name : 'color',
value: 'green',
label: '绿色'
},
{
xtype: 'radiofield',
name : 'color',
value: 'blue',
label: '蓝色'
},
{
xtype: 'selectfield',
label: '选择框',
options: [
{text: '条件1', value: 'first'},
{text: '条件2', value: 'second'},
{text: '条件3', value: 'third'}
]
},
{
xtype: 'sliderfield',
label: '拖动框',
value: 50,
minValue: 0,
maxValue: 100
},spinner,
{
xtype: 'textareafield',
label: '区域文本',
maxRows: 4,
name: 'bio'
},
{
xtype: 'urlfield',
label: '网站路径',
name: 'url'
}
]
}
]
}
)
formPanel.add(
{
xtype:"toolbar",
dock:"bottom",
layout:
{
pack:"center"
},
items:[
{
xtype:"button",
text:"填写数据",
handler:function()
{
formPanel.setValues(
{
name:"陈乃共",
email:"123@11.com",
password:"123"
}
)
}
},
{
xtype:"button",
text:"获取数据",
handler:function()
{
Ext.Msg.alert("hah",JSON.stringify(formPanel.getValues(),null,2));
}
},
{
xtype:"button",
text:"清空数据",
handler:function()
{
formPanel.reset();
}
}
]
}
)
Ext.Viewport.add(formPanel);
}
}
)
呵呵,创建组件的写法都很简单的。具体另外要加入的属性可查看官方提供的api文档。最新技术文章: