当前位置:  编程技术>移动开发
本页文章导读:
    ▪一段不错的反照代码用来写tableView配置界面选中        一段不错的反射代码用来写tableView配置界面选中 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    Class clazz = NSClassFromString([items_ objectAtIndex:indexPath.row]);    id view.........
    ▪ 自定义ExpandableListView下拉刷新功能简略实现(这里主要说自定义可下拉的功能)        自定义ExpandableListView下拉刷新功能简单实现(这里主要说自定义可下拉的功能)       ExpandableListView 笔记 ExpandableListVivew 是 ListView 的子类,它在普通 ListView 的基础上进行了扩展, 它把应.........
    ▪ apk反编译:工具跟注意事项       apk反编译:工具和注意事项 1. 先用apktools把apk本身解压;如果用7zip解压,会发现资源文件都是打不开的2. 然后用dex2jar把*.dex变成*.jar3. 最后用xjad打开jar里的class文件 ......

[1]一段不错的反照代码用来写tableView配置界面选中
    来源: 互联网  发布时间: 2014-02-18
一段不错的反射代码用来写tableView配置界面选中
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    Class clazz = NSClassFromString([items_ objectAtIndex:indexPath.row]);
    id viewController = [[clazz alloc] init];
    if (viewController) {
        [self.navigationController pushViewController:viewController animated:YES];
    }
}

    
[2] 自定义ExpandableListView下拉刷新功能简略实现(这里主要说自定义可下拉的功能)
    来源: 互联网  发布时间: 2014-02-18
自定义ExpandableListView下拉刷新功能简单实现(这里主要说自定义可下拉的功能)



      ExpandableListView 笔记 ExpandableListVivew 是 ListView 的子类,它在普通 ListView 的基础上进行了扩展, 它把应用中的列表项分为几组,每组里又可包含多个列表项。 ExpandableListVivew 的用法 与普通 ListView 的用法非常相似,只是 ExpandableListVivew 显示的列表项应该由 ExpandableAdapter 提供。

 

 

自定义的类如下:

 

package com.xing.wifichat.view;

import android.R.integer;
import android.content.Context;
import android.content.DialogInterface;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.xing.wifichat.R;

public class MainExpandableListView extends ExpandableListView implements
        OnScrollListener {

    @Override
    public void setAdapter(ListAdapter adapter) {
        // TODO Auto-generated method stub
        super.setAdapter(adapter);
    }

    //松开刷新
    private final static int RELEASE_TO_REFRESH=0;//
    private final static int PULL_TO_REFRESH=1;//下拉刷新
   
    private final static int REFRESHING =2;//正在刷新
   
    private final static int DONE = 3;   
    private final static int RATIO=3;//实际的padding的距离与界面 上偏移距离 的比例
    private LayoutInflater inflater;
    private LinearLayout headLayout;//头linearlayout
    private TextView tipsTextview;
    private TextView lastUpdatedTextView;
    private ImageView arrowImageView;//箭头的图标
   
    private ProgressBar progressBar;

    private RotateAnimation animation;
    // 反转动画
    private RotateAnimation reverseAnimation;

    private int headContentWidth;//头部的宽度
   
    private LinearLayout headView;
    private int headContentHeight;
    
    /** 手势按下的起点位置 */
    private int startY;
    private int firstItemIndex;

    private int state;

    private boolean isBack;

    //private OnRefreshListener refreshListener;

    private boolean isRefreshable;

    public MainExpandableListView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        init(context);
    }
    public MainExpandableListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        init(context);
    }

    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub

    }
    public void init(Context context)
    {
        inflater =LayoutInflater.from(context);
        headView =(LinearLayout) inflater.inflate(R.layout.refresh_head, null);
        arrowImageView = (ImageView) headView.findViewById(R.id.head_arrowImageView);//箭头
        arrowImageView.setMinimumWidth(70);
        arrowImageView.setMinimumHeight(50);
        progressBar = (ProgressBar) headView.findViewById(R.id.head_progressBar);
        tipsTextview = (TextView) headView.findViewById(R.id.head_tipsTextView);
        lastUpdatedTextView = (TextView) headView.findViewById(R.id.head_lastUpdatedTextView);
       
        headView.measure(0, 0);
        headContentHeight=headView.getMeasuredHeight();
        headContentWidth=headView.getMeasuredWidth();
       
        headView.setPadding(0, -headContentHeight, 0, 0);//把headview隐藏到顶部
        headView.invalidate();//刷新界面
       
        addHeaderView(headView,null,false);
        setOnScrollListener(this);//滚动监听
        animation = new RotateAnimation(0, -180, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
        animation.setInterpolator(new LinearInterpolator());
        animation.setDuration(250);
        animation.setFillAfter(true);
       
        reverseAnimation = new RotateAnimation(-180, 0, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
        reverseAnimation.setInterpolator(new LinearInterpolator());
        reverseAnimation.setDuration(200);
        reverseAnimation.setFillAfter(true);
       
        state = DONE;
        isRefreshable = false;
    }
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        // TODO Auto-generated method stub
        firstVisibleItem=firstVisibleItem;
       
    }
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub
       
    }
    /**
     * 设置触摸事件 总的思路就是
     *
     * 1 ACTION_DOWN:记录起始位置
     *
     * 2 ACTION_MOVE:计算当前位置与起始位置的距离,来设置state的状态
     *
     * 3 ACTION_UP:根据state的状态来判断是否下载
     */
    public boolean onTouchEvent(MotionEvent event)
    {
        isRefreshable = true;
        if (isRefreshable) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN://按下屏幕
                System.out.println("按下屏");
                if (firstItemIndex==0) {
                    startY=(int)event.getY();
                    System.out.println("记录down下当前的位置");
                   
                   
                }
                break;
               
            case MotionEvent.ACTION_MOVE: //移动屏幕
                System.out.println("移动下屏");
                int tempY=(int)event.getY();
                if (state ==PULL_TO_REFRESH) {
                    setSelection(0);//很重要
                    //下拉到可以release_to_refresh的状态
                    if ((tempY-startY)/RATIO>=headContentHeight) {
                        state=RELEASE_TO_REFRESH;
                        isBack=true;
                        changeHeaderViewByState();   
                    }
                    //上推到顶了
                    else if(tempY-startY<=0){
                        state =DONE;
                        changeHeaderViewByState();
                    }
                    headView.setPadding(0, -headContentHeight + (tempY - startY) / RATIO, 0, 0);
                }
                if (state == RELEASE_TO_REFRESH) {
                    setSelection(0);
                    // 往上推了,推到了屏幕足够掩盖head的程度,但是还没有推到全部掩盖的地步
                    if (((tempY - startY) / RATIO < headContentHeight) && (tempY - startY) > 0) {
                        state = PULL_TO_REFRESH;
                        changeHeaderViewByState();
//                        Log.v(TAG, "由松开刷新状态转变到下拉刷新状态");
                    }
                    headView.setPadding(0, -headContentHeight + (tempY - startY) / RATIO, 0, 0);
                }
                // done状态下
                if (state == DONE) {
                    if (tempY - startY > 0) {
                        state = PULL_TO_REFRESH;
                        changeHeaderViewByState();
                    }
                }
                break;
            case MotionEvent.ACTION_UP:
                System.out.println("ACTION_UP");
                if (state != REFRESHING) {
                    // 不在刷新状态
                    if (state == PULL_TO_REFRESH) {
                        state = DONE;
                        changeHeaderViewByState();
//                        Log.v(TAG, "下拉刷新状态,到done状态");
                    }
                    if (state == RELEASE_TO_REFRESH) {
                        state = REFRESHING;
                        changeHeaderViewByState();
                        isRefreshable = true;
//                        Log.v(TAG, "松开刷新状态,到done状态");
                    }
                }
                isBack = false;
                break;

            }
        }
        return super.onTouchEvent(event);
       
    }
    //当状态改变时候,调用 该方法,以更新界面
    private void changeHeaderViewByState()
    {
        switch (state) {
        case RELEASE_TO_REFRESH:
            arrowImageView.setVisibility(View.VISIBLE);
            progressBar.setVisibility(View.GONE);
            tipsTextview.setVisibility(View.VISIBLE);

            arrowImageView.clearAnimation();
            arrowImageView.startAnimation(animation);

            tipsTextview.setText("松开刷新");

//            Log.v(TAG, "当前状态,松开刷新");
            break;
        case PULL_TO_REFRESH:
            progressBar.setVisibility(View.GONE);
            tipsTextview.setVisibility(View.VISIBLE);

            arrowImageView.clearAnimation();
            arrowImageView.setVisibility(View.VISIBLE);
            tipsTextview.setText("下拉刷新");
            // 是RELEASE_To_REFRESH状态转变来的
            if (isBack) {
                isBack = false;
                arrowImageView.startAnimation(reverseAnimation);
            }
//            Log.v(TAG, "当前状态,下拉刷新");
            break;

        case REFRESHING:
            headView.setPadding(0, 0, 0, 0);
            progressBar.setVisibility(View.VISIBLE);
            arrowImageView.clearAnimation();
            arrowImageView.setVisibility(View.GONE);
            tipsTextview.setText("正在刷新...");
            break;
        case DONE:
            headView.setPadding(0, -headContentHeight, 0, 0);
            progressBar.setVisibility(View.GONE);
            arrowImageView.clearAnimation();
            arrowImageView.setImageResource(R.drawable.arrow);
            tipsTextview.setText("下拉刷新");
            break;
        }
    }
}
源码可以运行!!!!!!!!!!!!!!!!!


    
[3] apk反编译:工具跟注意事项
    来源: 互联网  发布时间: 2014-02-18
apk反编译:工具和注意事项
1. 先用apktools把apk本身解压;如果用7zip解压,会发现资源文件都是打不开的
2. 然后用dex2jar把*.dex变成*.jar
3. 最后用xjad打开jar里的class文件

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3