http://www.ophonesdn.com/forum/thread-2918-1-1.html
android 封装一个view模块
android 的UI设计有所见即所得的空间可用,设计UI的时候非常方便。我们在设计UI的时候也应该尽量复用,以提高效率。如整个页面都相同,或只是LIST的内容显示不同,我们应该使用同一个页面,而不应该配置多个页面。但如果只有页面的一部分内容相同,我们又不能公用整个页面,该怎么办呢?
我们可以对这个模块进行封装,只要在该使用的地方把它引入即可。看个封装gallery的小例子。
1.封装gallery的类:
package com.D_galleryPackage;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.AdapterView.OnItemClickListener;
public class GalleryLayout extends LinearLayout implements OnClickListener, OnItemClickListener{
private Context mContext;
private ImageView pre, next;
private Gallery mGallery;
private int FILL = ViewGroup.LayoutParams.FILL_PARENT;
private int WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT;
private List<Integer> myimage = new ArrayList<Integer>();
public GalleryLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}
public void updateUI(){
myimage.add(R.drawable.coupons_new);
myimage.add(R.drawable.profile_ad_icon_new);
myimage.add(R.drawable.profile_menu_icon_new);
myimage.add(R.drawable.save_icon_new);
myimage.add(R.drawable.video_icon_new);
pre = new ImageView(mContext);
pre.setImageDrawable(getResources().getDrawable(R.drawable.map_point_back));
next = new ImageView(mContext);
next.setImageDrawable(getResources().getDrawable(R.drawable.map_point_forward));
mGallery = new Gallery(mContext, null);
ImageAdapter adapter = new ImageAdapter(mContext);
mGallery.setAdapter(adapter);
mGallery.setLayoutParams(new LayoutParams(FILL, WRAP_CONTENT, 1));
setGallerySelection(mGallery);
pre.setOnClickListener(this);
next.setOnClickListener(this);
mGallery.setOnItemClickListener(this);
setGravity(Gravity.CENTER);
addView(pre);
addView(mGallery);
addView(next);
}
private void setGallerySelection(Gallery gallery) {
if(myimage.size() >=2){
gallery.setSelection(1);
}
}
@Override
public void onClick(View v) {
if(v == pre){
int id = (int) mGallery.getSelectedItemId();
if(id > 0 ){
Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.push_left_in);
mGallery.setAnimation(animation);
mGallery.setAnimationCacheEnabled(true);
mGallery.setSelection(--id, true);
}
}else if (v == next) {
int id = (int) mGallery.getSelectedItemId();
if(id < (myimage.size() -1)){
mGallery.setSelection(++id, true);
}
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
new AlertDialog.Builder(mContext).setMessage(String.valueOf(position)).setTitle("gallery Click event").setPositiveButton("==OK==", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
public class ImageAdapter extends BaseAdapter{
private Context myContext;
public ImageAdapter(Context c)
{
myContext = c;
}
@Override
public int getCount() {
return myimage.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView tv = new ImageView(myContext);
tv.setImageDrawable(getResources().getDrawable(myimage.get(position)));
tv.setPadding(20, 10, 29, 10);
tv.setLayoutParams(new Gallery.LayoutParams(WRAP_CONTENT, WRAP_CONTENT ));
return tv;
}
}
}
2.UI中引入:
<com.D_galleryPackage.GalleryLayout
android:layout_gravity="center"
android:clickable="false"
android:focusable="false"
android:l
android:id="@+id/galleryLayout"
android:layout_height="75dip"
android:layout_width="fill_parent"
android:background="#fff" />
3.代码中(要使用gallery的地方,和UI搭配)调用:
galleryLayout = (GalleryLayout) findViewById(R.id.galleryLayout);
galleryLayout.updateUI();
分享到:
相关推荐
kotlin对activity和Fragment的简单封装,使得安卓开发越来越简洁。
1.完成一个简单的mvp示例,/model包下的Model_1、/...5.以上步骤已经基本完成P层优化,在Activity每次都要去调用P层中View的绑定和分离,因此自然而然的使用BaseActivity抽象类来完成优化(这里也使用泛型来完成)
全屏模式下,即使将activity的windowSoftInputMode的属性设置为:adjustResize,在键盘显示时它未将Activity的Screen向上推动,所以你Activity的view的根树的尺寸是没有变化的。在这种情况下,你也就无法得知键盘的...
3. 分层在使用过程中,我发现如果adapter放在view层,那就会影响到view层的独立性。此外adapter中经常有很多数据处理的操作,比如通过type选择item,数据的拆包、转换等操作。于是我还是推荐把adapter放在mvp的p层,...
DuktapeJava 是针对 Android 平台封装的 Duktape JavaScript 引擎;实现Javascript 和 Java的无缝调用。 初始化DuktapeEngnine @Override protected void onCreate(Bundle savedInstanceState) { super....
封装 :接口化调用,支持MVP结构中使用(View层implement LoadRetryRefreshListener接口,然后直接在Activity/Fragment传入this即可)。示例Activity中加载成功Activity中加载失败在Activity中加载成功,然后再次加载...
import android.net.Uri;import android.os.Bundle;import android.app.Activity;...import android.view.View; public class MainActivity extends Activity { private static final String TAG = “Activi
DevUtils是一个Android工具库,主要根据不同功能模块,封装快捷使用的工具类以及API方法调用 该项目可行的合适开发人员,快捷,高效开发安全可靠的项目。 文档- DevApp-Android工具类库 DevAssist-封装逻辑代码,...
Topology拓扑部分 包含一个使用IOC设计思想的控件初始化方式:可通过注解的方式进行UI绑定,与设置监听,在Activity和Fragment中均可以通过一行代码绑定控件并实现点击监听;还包含了在目前应用开发中常见的布局界面...
也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...
目前市场业务中在产品以及其他项目的认证和检测方面存在诸多不便,用户需要实地考察并频繁与检测单位沟通,填写繁琐的纸质检测报告、当面送递样品,对于检测环节中存在的问题难以及时交互并处理。市场上相应的检测...
|--任务循环之只在Activity显示时执行 |--修改文件的最后修改时间 |--偏好设置(回显) |--内存优化之各种方法 |--内容提供者之短信的序列化对象读写 |--内容提供者之短信的获取与写入 |--内容提供者之联系人读写与...
给封装好了,用的时候调用setContentLayout塞进去你的layout 即可。 好处:便于统一管理页面,比如可以在页面内部显示加载框,可以添加右侧菜单,添加空View,无网页面等等。 其中里面包含了Post() 网络请求的方法,...
14.4 数据库的使用(调用已封装SQL语句的方法) 200 14.5 简单游标适配器的使用及分页效果的实现 207 15.1对手机通讯录的增删改查 211 15.2查询手机通话记录 221 15.3操作手机短信 224 16.1 自定义内容提供者的编写...
查询出列表,也就是返回list, 在我们这个例子中也就是 List<User> , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...