当前位置:  编程技术>移动开发
本页文章导读:
    ▪BaseAdapter中getView中处置点击事件        BaseAdapter中getView中处理点击事件 static final class MyAdapter extends BaseAdapter {      /** override other methods here */      @Override     public View getView(final int position, View convertView, ViewGroup parent) {      .........
    ▪ *gif 解码 - 理论        *.gif 解码 - 理论   我们知道Android 默认是不支持*.gif 的 但是又需要这些功能 怎么办? 继续之     其实 *.gif 编码 解码 要详细说的话 估计1星期也说不出什么来 而且很快就会忘记 因为其组成.........
    ▪ Intent的施用       Intent的使用 以下内容Sinfrancis版权所有,专注请注明来自  http://mdev.cc/dev 在Android中,传递数据使用Intent,Intent相当于各个Activity之间的桥梁,可以传递数据,可以通过Intent启动另外一个Acti.........

[1]BaseAdapter中getView中处置点击事件
    来源: 互联网  发布时间: 2014-02-18
BaseAdapter中getView中处理点击事件

static final class MyAdapter extends BaseAdapter { 
 
    /** override other methods here */ 
 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
        ViewHolder holder; 
 
        if (convertView == null) { 
            // inflate the view for row from xml file 
 
            // keep a reference to each widget on the row. 
            // here I only care about the button 
            holder = new ViewHolder(); 
            holder.mButton = (Button)convertView.findViewById(R.id.button); 
            convertView.setTag(holder); 
        } else { 
            holder = (ViewHolder)convertView.getTag(); 
        } 
 
        // redefine the action for the button corresponding to the row 
        holder.mButton.setOnClickListener(new OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                // do something depending on position 
                performSomeAction(position); 
                // mark data as changed 
                MyAdapter.this.notifyDatasetChanged(); 
            } 
        } 
    } 
    static final class ViewHolder { 
        // references to widgets 
        Button mButton; 
    } 


    
[2] *gif 解码 - 理论
    来源: 互联网  发布时间: 2014-02-18
*.gif 解码 - 理论

 

我们知道Android 默认是不支持*.gif 的 但是又需要这些功能 怎么办? 继续之

 

 

其实 *.gif 编码 解码 要详细说的话 估计1星期也说不出什么来 而且很快就会忘记 因为其组成也极其复杂 且没什么原因 所以 从国外anddev 淘来一份如何解码*.gif 的代码 现与诸位分析 看该代码 推荐与*.gif 解码 一起看 效果会更好的 否则 看完即忘 所以把*.gif 解码 也一起释放给大家

 

 

其实 如何解码*.gif并不是今天的重点 现在大概说下如何使用该接口

 

 

 

假设 该接口为:TypegifOpenHelper.java

 

 

[使用]

 

1. 创建TypegifOpenHelper

 

TypegifOpenHelper gHelper = new TypegifOpenHelper();

 

 

2. 现有gif文件:lion.gif 存放在 res\raw 目录

 

int id = R.raw.lion;

gHelper.read(this.getResources().openRawResource(id));

 

 

3. 当然 以上仅仅是:从*gif中提取出所有Bitmap  而现在要求是显示连贯动画 所以我们还需要开辟一个Thread 用于隔段时间通知View 刷新图片 显示下一张 如此不断循环

 

 

 

以上是理论部分 改天演示如何使用该接口 并以组件View的形式 供 *.java *.xml 中使用!!!!

 

 

1 楼 gryphone 2010-05-07  
悲哀 似乎大家更关注应用开发 不关心其原理
牢骚一下
2 楼 goontosoon 2010-05-07  
怎么没有人支持啊?不过我还是第一次知道android不支持gif,我以为无所不能呢
3 楼 yzhong_sa 2010-05-07  
呵呵  这个功能我一个月前完成了。。 只要按照gif的编码结构对文件进行解码,UI上自定义一个view,onDraw()方法画当前贞的bitmap,根据每一贞的delay控制一个线程去invalidate 就ok。。

另外 Android自带的Movie是可以播放gif的,但是如果图片太大,它可能加载不成功,或者播放时图像扭曲。不够健壮  自己写一个gif解码器就是了。
4 楼 gryphone 2010-05-08  
yzhong_sa 写道
呵呵  这个功能我一个月前完成了。。 只要按照gif的编码结构对文件进行解码,UI上自定义一个view,onDraw()方法画当前贞的bitmap,根据每一贞的delay控制一个线程去invalidate 就ok。。

另外 Android自带的Movie是可以播放gif的,但是如果图片太大,它可能加载不成功,或者播放时图像扭曲。不够健壮  自己写一个gif解码器就是了。

基本原理是这样的 不过我的代码 效率处理的不太好 其实可以一边解码 一边播放 会更好一点 特别 *.gif 比较大时 差别会比较明显 你有研究过这个么?
5 楼 lishali12345 2010-05-09  
由于项目中需要使用到GIF解码的东西,刚好在JE上看到,甚感幸福啊
不过我在阅读楼主提供的代码时发现有一个问题,就是readShort()函数的实现
// read 8 bit data
protected int readShort() {
// read 16-bit value, LSB first
return read() | (read() << 8 );
}
这个考虑的是小端字节序存储吗?为何确定就是小端字节序呢,而没有考虑别的方式呢,这个与PC上Java编程时通过二进制流读取来获取short值的方法是一致的吗?
##############################
不好意思发到另一个帖子上了,希望楼主能看到。呵呵
6 楼 gryphone 2010-05-09  
lishali12345 写道
由于项目中需要使用到GIF解码的东西,刚好在JE上看到,甚感幸福啊
不过我在阅读楼主提供的代码时发现有一个问题,就是readShort()函数的实现
// read 8 bit data
protected int readShort() {
// read 16-bit value, LSB first
return read() | (read() << 8 );
}
这个考虑的是小端字节序存储吗?为何确定就是小端字节序呢,而没有考虑别的方式呢,这个与PC上Java编程时通过二进制流读取来获取short值的方法是一致的吗?
##############################
不好意思发到另一个帖子上了,希望楼主能看到。呵呵

了解 没关系 至于你说的问题 应该不存在吧 因为目标是*.gif数据流 而不是pc 所以没有该必要
7 楼 lishali12345 2010-05-11  
gryphone 写道
lishali12345 写道
由于项目中需要使用到GIF解码的东西,刚好在JE上看到,甚感幸福啊
不过我在阅读楼主提供的代码时发现有一个问题,就是readShort()函数的实现
// read 8 bit data
protected int readShort() {
// read 16-bit value, LSB first
return read() | (read() << 8 );
}
这个考虑的是小端字节序存储吗?为何确定就是小端字节序呢,而没有考虑别的方式呢,这个与PC上Java编程时通过二进制流读取来获取short值的方法是一致的吗?
##############################
不好意思发到另一个帖子上了,希望楼主能看到。呵呵

了解 没关系 至于你说的问题 应该不存在吧 因为目标是*.gif数据流 而不是pc 所以没有该必要

我想知道的是*.gif文件中存储short值是以小端字节序存储的吗?这个是GIF文件格式中的明确标准吗?
因为如果只是从程序解析流的层面上来讲,是很有必要考虑大小端的问题呢,要不然结果肯定是错误的。
8 楼 jackhuny 2011-01-02  
楼主的解码器很好用, 不过里面有个protected boolean transparency我把他设成True后解析出来的gif背景还是黑色的, 我在其他的gif编辑器里确认过背景确是是透明的. 不知道还有哪里需要修改的?

    
[3] Intent的施用
    来源: 互联网  发布时间: 2014-02-18
Intent的使用
以下内容Sinfrancis版权所有,专注请注明来自  http://mdev.cc/dev


在Android中,传递数据使用Intent,Intent相当于各个Activity之间的桥梁,可以传递数据,可以通过Intent启动另外一个Activity。
Intent有显式和隐式之分,显式的是直接什么要启动的组件,比如Service或者Activity,隐式的通过配置的datatype、 url、action来找到匹配的组件启动。
此程序目的:
1、显式启动Activity和service
2、通过隐式的变量,启动Activity和Service

先来看先我们定义的变量类:
package cc.androidos.intent;
public class Book {
 //Intent的数据类型
 public static  String CONTENT_TYPE = "cc.android/intent.demo";
 
 //Intent中的URL,这里要使用Content开头,不然会找不到组件
 public static String CONTENT_URI = "content://test/";
}

程序主界面的代码:还有四个按钮,分别用于启动不同的组件:
package cc.androidos.intent;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class IntentDemo extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
       
        Button firstbtn = (Button) findViewById(R.id.firstbtn);
        Button firstbtnservice = (Button) findViewById(R.id.firstbtnservice);
        Button secondbtn = (Button) findViewById(R.id.secondbtn);
        Button secondbtnservice = (Button) findViewById(R.id.secondbtnservice);
       
       
        firstbtn.setOnClickListener(new View.OnClickListener(){
   public void onClick(View v) {
    //显式启动FirstIntentDemo Activity
    Intent i = new Intent(getApplicationContext(),FirstIntentDemo.class);
    startActivity(i);
   }
        });
       
        firstbtnservice.setOnClickListener(new View.OnClickListener(){
   public void onClick(View v) {
    //显式启动FirstService 后台服务
    Intent i = new Intent(getApplicationContext(),FirstService.class);
    startService(i);
   }
         
        });
       
       
        secondbtn.setOnClickListener(new View.OnClickListener(){
   public void onClick(View v) {
    
    //通过Action uri和dataype启动Activity
    //程序会自动匹配到Intent-Filter配置中有(action属性)Action为Intent.ACTION_VIEW,并且数据类型(data)为cc.android/intent.demo的组件上
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse(Book.CONTENT_URI), Book.CONTENT_TYPE);
    startActivity(intent);
   }
        });
        secondbtnservice.setOnClickListener(new View.OnClickListener(){
   public void onClick(View v) {
    //通过Action uri和dataype启动Service
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_EDIT);
    intent.setDataAndType(Uri.parse(Book.CONTENT_URI), Book.CONTENT_TYPE);
    startService(intent);
   }
        });
       
    }
}
  
 

以下分别是被启动的组件代码:
显式Activity和Service:
package cc.androidos.intent;
import android.app.Activity;
import android.os.Bundle;
public class FirstIntentDemo extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.firstintent);
 }
}
===============================================
package cc.androidos.intent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class FirstService extends Service{
 @Override
 public IBinder onBind(Intent intent) {
  return null;
 }
 
 @Override
 public void onCreate() {
  super.onCreate();
  
  String tag = "First Service on Create";
  Log.d(tag,"This is the first service...");
 }
}

隐式启动的Activity和Service:
package cc.androidos.intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class SecondIntentDemo extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  String tag = "SecondIntentDemo onCreate..";
  setContentView(R.layout.secondintent);
  Intent i = getIntent();
  Log.d(tag, "intent type : " + i.getType());
  Log.d(tag, "intent url : " + i.getData().toString());
 }
}

package cc.androidos.intent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class SecondService extends Service {
 @Override
 public IBinder onBind(Intent arg0) {
  return null;
 }
 
 @Override
 public void onCreate() {
  super.onCreate();
  String tag = "Second service ";
  Log.d(tag, "Startup second service... ");
 }
}
 

AndroidManifest.xml文件配置:

这个很重要,需要配置好才行,不然会出现AcitvityNotFoundException

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="cc.androidos.intent"
      android:versionCode="1"
      android:versionName="1.0.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".IntentDemo"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       
        <!-- First Intent Demo  -->
        <activity android:name=".FirstIntentDemo"  android:label="@string/app_name">
        </activity>
       
       
        <!-- Second Intent Demo  -->
          <activity android:name=".SecondIntentDemo"  android:label="@string/app_name">
         <intent-filter >
         <!--The intent filter parameters must match the intent datatype(mimeType) \ action  -->
          <action android:name="android.intent.action.VIEW"/>
          <data android:mimeType="cc.android/intent.demo"/>
          <category android:name="android.intent.category.DEFAULT"/>
         </intent-filter>
        </activity>
       
       
        <service android:name=".FirstService" >
        </service>
       
         <service android:name=".SecondService" >
          <intent-filter >
           <!--The intent filter parameters must match the intent datatype(mimeType) \ action  -->
           <action android:name="android.intent.action.EDIT"/>
          <data android:mimeType="cc.android/intent.demo"/>
          <category android:name="android.intent.category.DEFAULT"/>
          </intent-filter>
          
        </service>
       
       
    </application>
</manifest> 

    
最新技术文章:
▪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