当前位置:  编程技术>移动开发
本页文章导读:
    ▪格局式跑马灯,非TextView        布局式跑马灯,非TextView 原帖:http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=42665&pid=259991&page=1&extra=#pid259991如题,简单的实现了跑马灯效果,把Scroll.java放入android.view包下,XML使用如下:&.........
    ▪ Objective-C最基础语法之基础门类        Objective-C最基础语法之基础类型 我对OC了解还不深,只知道一些最基础的东西,总结一下。 基础数据类型 在OC里面也可以使用C的基础类型,比如int,float等,但一些OC的基础类型有与C的对应.........
    ▪ Cocoa数目字类型       Cocoa数字类型 3.3.7   Cocoa数字类型 本节中的类型不是Objective-C语言的一部分。它们都定义于Cocoa框架中,但是,我们会看到它们经常在这里提及。从Mac OS X 10.5开始,Apple已经使用定义的类型.........

[1]格局式跑马灯,非TextView
    来源: 互联网  发布时间: 2014-02-18
布局式跑马灯,非TextView
原帖:
http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=42665&pid=259991&page=1&extra=#pid259991
如题,简单的实现了跑马灯效果,把Scroll.java放入android.view包下,XML使用如下:
<?xml version="1.0" encoding="utf-8"?>
<Scroll xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dip"
android:layout_height="wrap_content">
<!--注意:Scroll里的布局或者控件元素只能有一个可以用布局嵌套布局/控件来使用,当Scroll里的唯一元素的宽度超过Scroll效果最好,如果不超过没加处理,有兴趣可以自己加上-->
<TextView android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="放大镜流口水附近拉神经分裂卡上的经费里卡迪神经分裂空间爱上" />
</Scroll>
package android.view;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Bitmap.Config;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.widget.HorizontalScrollView;

public class GroupScrollView extends HorizontalScrollView implements Runnable {
	private View inner;
	private Bitmap bitmap = null;
	private int x;
	private int width;
	private int pWidth;
	private int pHeight;

	/**
	 * 滚动步长
	 */
	private int step = 5;
	/**
	 * 滚动间隔距离
	 */
	private int space = 100;
	private int delay = 500;

	public GroupScrollView(Context context) {
		super(context);
		setBackgroundColor(android.R.color.transparent);
	}
	public GroupScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
		setBackgroundColor(android.R.color.transparent);
	}

	@Override
	protected void onFinishInflate() {
		if (getChildCount() == 1) {
			inner = getChildAt(0);
		}
	}

	@Override
	protected void onDetachedFromWindow() {
		super.onDetachedFromWindow();
		handler.removeCallbacks(this);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		if (getWidth() == 0) {
			android.view.ViewGroup.LayoutParams lp = getLayoutParams();
			lp.width = pWidth;
			lp.height = pHeight;
			setLayoutParams(lp);
		}
		if (bitmap == null && inner != null) {
			width = inner.getMeasuredWidth();
			bitmap = Bitmap.createBitmap(width, inner.getHeight(),Config.RGB_565);
			Canvas canvas1 = new Canvas(bitmap);
			inner.draw(canvas1);
			pWidth = getWidth();
			pHeight = getHeight();
			if (inner != null) {
				removeViewInLayout(inner);
				inner = null;
			}
			run();
		}
		if (bitmap != null) {
			int nowX = x;
			nowX -= step;
			canvas.drawBitmap(bitmap, nowX, 0, null);
			if (nowX < 0) {
				canvas.drawBitmap(bitmap, width + nowX + space, 0, null);
			}
			if (nowX <= -width) {
				nowX = 0;
			}
			x = nowX;
		}
		super.onDraw(canvas);
	}

	private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {

			super.handleMessage(msg);
		}
	};

	@Override
	public void run() {
		invalidate();
		handler.postDelayed(this, delay);
	}

}

布局main.xml:
<?xml version="1.0" encoding="utf-8"?>
<GroupScrollView xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	>
	<LinearLayout android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:orientation="vertical"
		>
		<TextView android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:text="1234567890abcdefghijklmnopqrstuvwxyz1234567890" 
		/>
		<LinearLayout android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:orientation="horizontal"
		>
			<TextView android:layout_width="fill_parent"
			android:layout_height="wrap_content" 
			android:text="abcdefghijklmnopqrstuvwxyz" 
			android:layout_weight="1"
			/>
			<TextView android:layout_width="fill_parent"
			android:layout_height="wrap_content" 
			android:text="1234567890" 
			android:layout_weight="1"
			/>
		</LinearLayout>
	</LinearLayout>
</GroupScrollView>
1 楼 wizardmly 2011-10-12  
楼主你好,我想要实现跑马灯的一直跑的效果,而不是刷新后重新来~  这个有办法么?

    
[2] Objective-C最基础语法之基础门类
    来源: 互联网  发布时间: 2014-02-18
Objective-C最基础语法之基础类型

我对OC了解还不深,只知道一些最基础的东西,总结一下。

  • 基础数据类型
  • 在OC里面也可以使用C的基础类型,比如int,float等,但一些OC的基础类型有与C的对应的,看上去很类似,却提供了更多的功能和特性。比如string和NSString,string就是普通的C语言的字符串,而NSString是一个object,不仅包含了字符串,还有一些跟显示相关的接口等,你可以直接在屏幕上打印输出一个NSString,却不能对string这样操作。
    • NSInteger、NSUInteger、CGFloat
    这几个类型跟C里的类型基本是一样的,但还是稍有不同,这其实是“type define”,比如NSInteger的定义是这样的:
     #if_LP64_||NS_BUILD_32_LIKE_64
    typedef long NSInteger;
    typedef unsigned long NSInteger;
    #else
    typedef int NSInteger;
    typedef unsigned int NSInteger;
    #endif  也就是说当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的。
    • BOOL
    OC里面的bool值的取值是YES和NO,而不是TRUE和FALSE。
    • NSNumber
     有人说既然都有了NSInteger等这些基础类型了为什么还要有NSNumber?它们的功能当然是不同的。
     NSInteger是基础类型,但是NSNumber是一个类。如果想要存储一个数值,直接用NSInteger是不行的,比如在一个Array里面这样用:
     NSArray *array = [[NSArray alloc]init];
    [array addObject:3];//会编译错误  这样是会引发编译错误的,因为NSArray里面放的需要是一个类,但‘3’不是。这个时候需要用到NSNumber:
     NSArray *array = [[NSArray alloc]init];
    [array addObject:[NSNumber numberWithInt:3]];
    • NSString、NSMutableString
    字符串一直是个比较复杂的类型,提供的功能很多,涉及的问题也比较多,比如字符串的比较、格式化、拼接等等,这可以专门开一个专题,这里只是简单介绍一下。
    OC里面有个特殊的符号:“@”,这个符号大概的意思是表示“这是OC的”。在使用NSString的使用双引号的前面一定要加这个符号,否则就是普通的C字符串。而且NSString是一个类,定义一个NSString的变量的时候要使用指针。比如:
     NSString *str = "a string";//这是错误的
    NSString str =@"a string";//这也是错误的
    NSString *str = @"a new string";//这是正确的  一个NSString变量赋值了之后不能改变其值(当然可以重新给它赋其他的值),当需要使用可变的字符串的时候可以使用NSMutableString。NSMutableString继承值NSString,额外提供了一些改变值的方法。比如:
     NSMutableString *str = @"";
    [str appendString:@"hello "];//str = @"hello "
    [str appendFormat:@"my number is:%d",1];//str = @"hello my number is 1"
    •  NSArray、NSMutableArray
       这是OC里面的两个集合。顾名思义,NSArray的容积是固定的,而NSMutableArray的是可变的,当添加的对象多余容积时会自动扩增。存放入集合中的一定是一个类的实例。 初始化一个NSArray的代码如:
     NSArray *array = [NSArray arrayWithObjects:obj1,obj2...,nil];//注意要以nil结尾,否则会有编译警告  NSArray常用的属性当然就是count了,比如
     NSUInteger count = [array count];//
    当要判断一个集合里面是否包含某个元素的时候需要注意,使用的方法跟.net里面的稍有不同,如:
     if ([array indexOfObject:obj3] == NSNotFound]{
    //do something
    }
    NSMutableArray的使用方法跟NSArray的类似,常用的方法有:
    + (NSMutableArray *)array;
    -  (void)addOvject:(id)object;
    - (void)removeObject:(id)object;
    - (void)removeAllObjects;
    - (void)insertObject:(id)object atIndex:(unsigned)index;
    •   NSDictionary、NSMutableDictionary         
      OC的字典集合,跟其他语言的字典类似,跟NSArray一样,当直接调添加若干个对象的初始化方法时,要以nil结尾,比如:
     NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:obj1,@"key1",obj2,@"key2",nil];//注意以nil结尾
     当需要判断是否包含某个元素的时候,不是调用contain方法,而是直接判断返回的值是不是nil,比如:
     if ([dic objectForKey:@"key3"]){
    //这里的代码不会执行,因为key3返回的是nil
    }
    NSMutableDictionary的使用方法类似,常用的方法有:
     + (NSMultableDictionary *)dictionary;
    - (void)addObject:(id)object forKey:(id)key;
    - (void)removeObjectForKey:(id)key
    - (void)removeAllObjects;
    •  NSDate      
    日期和时间。OC里面的日期类使用起来比较复杂,即使是实现简单的加一天减一个小时这样的操作都要经过很多的代码从能实现,这里只是一带而过,在其他的文章里会重新提到。
    获取当前时间的代码为:
     NSDate *today = [NSDate date];
     这里不得不发一些牢骚,很多人都说OC是多么多么优美的语言,但个人感觉有不少地方实在谈不上优美,就比如这个NSDate,功能是蛮强大的,但使用起来真的很不方便,对于新手而言完全是无从下手。这且不说,获取当前时间居然用的不是today而date,如果没了解过,谁会想到date=today?     
    • nil
    OC里面空指针对象是nil,而不是null。
    • id
    OC支持动态类型,也就是在写代码的时候不确定是声明类型,在程序运行的时候从能判断。动态类型的变量用id来声明,比如:
     id tem = 1;//注意是id,而不是id *,除非你真的真的是想声明一个这样的指针
    tem = @"abc";
    tem = [[myClass alloc]init];
    •    @selector
    selector是个非常特殊的类型,有点类似与函数指针,可以把一个函数当作参数来传递。这个需要专门讨论。


    转自:http://longer3436.blog.163.com/blog/static/128330622010112011408123/


        
    [3] Cocoa数目字类型
        来源: 互联网  发布时间: 2014-02-18
    Cocoa数字类型

    3.3.7   Cocoa数字类型

    本节中的类型不是Objective-C语言的一部分。它们都定义于Cocoa框架中,但是,我们会看到它们经常在这里提及。从Mac OS X 10.5开始,Apple已经使用定义的类型替代了Cocoa框架中int和float的大多数出现,而定义的类型的长度取决于代码是编译为32位可执行程序还是64位可执行程序(参见附录C)。

    NSInteger

    NSInteger替代了Cocoa框架中大多数int的出现。它在32位环境中定义为int,在64位环境中定义为long(64位整数)。

    NSUInteger

    NSUInteger是NSInteger的无符号形式。它替代了Cocoa框架中的大多数unsigned的出现。在32位环境中,它是一个无符号的32位整数;在64位环境中,它是一个无符号的long(无符号的64位整数)。

    CGFloat

    CGFloat替代了float。当针对32位环境编译的时候,它是一个float(32位);当针对64位环境编译的时候,它是一个double(64位)。Foundation框架提供了一个定义的常量,CGFLOAT_IS_DOUBLE,如果需要通过编程知道CGFloat在当前的环境中是一个float还是一个double,使用下面的语句:

  • if ( CGFLOAT_IS_DOUBLE )  
  •   NSLog( @"Double !\n");  
  • else  
  •   NSLog(@"Float !\n"); 
  • NSLog

    NSLog是Foundation框架中定义的一个用于字符输出的函数。NSLog不是Objective-C语言自身的一部分,但是,这里介绍它,是因为它用于本书中的很多示例和练习中。

    NSLog类似于printf,但是有如下一些区别:

    NSLog写入控制台日志,也写入一个终端窗口。控制台日志是操作系统负责维护的一个消息日志。在OS X上,可以使用Console应用程序(/Applications/Utilities/ Console.app)来查看控制台日志。

    NSLog的格式字符串是一个NSString直接量,而不是一个C字符串直接量。

    NSLog在打印后自动换到一个新行。不需要在格式字符串末尾添加一个额外的\n。

    NSLog使用一个额外的转换修饰符,%@,它接受一个Objective-C对象作为其参数。在转换中,NSLog调用参数对象的description方法。该description方法返回一个NSString,用以描述该对象。返回的NSString替代了输出中的%@,如下面的例子所示:

  • NSString *aString =  @"Hello New York!";  
  •  
  • NSLog( @"The object description is: %@", aString ); 
  • NSString的描述只是字符串本身。执行以上代码,将会产生如下的输出:

  • The object description is: Hello New York! 
  • 当创建自己的类时,可以覆盖description方法为自己的类提供定制的描述。

    注意   如果使用带有%@描述符的格式字符串,但是,忘记了提供一个对应的对象参数,那么NSLog将尝试向位于对象参数所应该放置的地址的字节发送一条description消息。这通常会导致程序崩溃。

    在一个发布的程序中,不应该使用NSLog语句(这么做会在客户的控制台日志中产生杂乱信息),但是,对于在学习和调试过程的简单输出来说,它很有用。

    NSLog有一项功能可能很恼人,它在你要求其输出的内容前面加了一个长长的字符串信息,其中包括执行该语句的时间和日期(详细到毫秒)、可执行程序的名称,以及执行它的程序的进程id。如下的NSLog语句:

  • NSLog( @"Greetings from NSLog" ); 
  • 将产生如下的输出:

  • 2010-02-01 11:41:26.556 a.out[33955:903] Greetings from NSLog 
  • 为了显示上的清晰,在本书后面的部分中,在显示NSLog的输出时,我们去除了额外的信息。

     

     

    转自:   http://book.51cto.com/art/201102/245615.htm


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