Android 学习笔记(十五):Activity-GalleryView

LogCat调测信息

在Window -> Show View -> Other... -> Android -> LogCat,这样将显示LogCat的窗口,对于System.out.print()以及Log.d(),可以打印出我们所需要的信息,例如:

System.out.print("Hello ---------------------/n");
Log.d("WEI","Hi ------------------1-----------");
Log.d("WEI","Hi -------------------2----------");

这样,我们在LogCat的查窗口,可以看到相关的信息。Log有5个级别,分别是v,d,i,w,e,使用Log.w类似方式调用。

GalleyView

Galley是画廊的意思,一般只在图片显示中使用,而且也不常用。

1)Android XML文件

<?xml version="1.0" encoding="utf-8"?>
<Gallery  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/gallery"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
 </Gallery>

由于Galley用户处理图片,因此处理item可采用ImageView,在设置adapter中,我们可以参见《Android 学习笔记(十三):Activity-GridView》中对BaseAdapter进行继承。

2)Java源代码

public class Chapter7Test8 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chapter_7_test8);

        //步骤1:和之前学习的一样,设置adapter来描述item的内容以及设置item的格式;通过setOnItemClickListener()设置点击触发的操作。
        Gallery gallery = (Gallery)findViewById(R.id.gallery);
        gallery.setAdapter(new ImageAdapter(this));
        gallery.setOnItemClickListener(new OnItemClickListener(){
            public void onItemClick(AdapterView<?> parent,View v,int position,long id){
                Toast.makeText(Chapter7Test8.this,""+position,Toast.LENGTH_SHORT).show();
            }
        }
);
    }
    //步骤2:adapter继承BaseAdapter,具体描述item。需要创建构造函数,具体化getCount(), getItem(), getItemId(), getView()。
    private class ImageAdapter extends BaseAdapter{
        private Context mContext;
        private Integer[] mImageIds = {  R.drawable.sample_1,  R.drawable.sample_2, R.drawable.sample_3,
                R.drawable.sample_4,  R.drawable.sample_5,  R.drawable.sample_6,
                R.drawable.sample_7 }; //我们将名称为drawable_sample_1的图片文件,拷贝到drawable/下面。
       
        public ImageAdapter(Context context){
            mContext = context;
        }

        public int getCount() {
            return mImageIds.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }
       //步骤3:每个item都是ImageView,通过setImageResource将图片呈现,设置每个item的大小,以及显示比例,这里,我们采用FIT_XY,根据X:Y将整个图片显示出来,如果X:Y和图片长:宽不一样,图片可能有些变形。
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView image = new ImageView(mContext);
            image.setImageResource(mImageIds[position]);
            image.setLayoutParams(new Gallery.LayoutParams(150,100));
            image.setScaleType(ImageView.ScaleType.FIT_XY);
            return image;
        }  
    }
}

3)通过xml文件对item的格式进行设置

我们在res/values/下面增加一个xml文件,用于描述自定义widget的属性格式为

<resources>
    <declare-styleable name="XXXX">
        <attr name="AAAAA" format="BBBB"/>
        <attr name="aaaaa" format="bbbb"/>
    </declare-styleable>
</resources>

在R.java中将增加int R.styleable.XXXX[]来表示此定义,如果里面有2个属性,则有两个元素。在本例,设置style的属性,我们设置一个android已定义的属性galleryItembackground,它定义一个具有一个边框的gallery的item。如下:

<resources>
    <declare-styleable name="HelloGallery">
        <attr name="android:galleryItemBackground" />
    </declare-styleable>
</resources>

获得自定义属性方式:

TypedArray a= obtainStyledAttributes(R.styleable.XXX/*int[]*/);
attrId = a.getResourceId(R.styleable.XXXX_AAAA,defaultId);//获得该属性的ID,如果没有发现该属性,则返回defaultId的值。
a.recyle(),//在使用obtainStyledAttributes()后应调用,是的可以被系统重用。

在这个例子中:

        public ImageAdapter(Context context){
            ... ...
            TypedArray a= obtainStyledAttributes(R.styleable.HelloGallery);
            mGalleryItemBackground = a.getResourceId(R.styleable.HelloGallery_android_galleryItemBackground, 0);
            a.recycle();
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ... ...
            image.setBackgroundResource(mGalleryItemBackground);
            ... ...
        }

相关链接:我的Andriod开发相关文章

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您提供一个基于 Java 的 Android 代码示例,实现一个“掌上驴友”软件,满足您的需求。代码如下所示: ### LoginActivity.java ```java package com.example.lvyoutest; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.text.method.PasswordTransformationMethod; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class LoginActivity extends AppCompatActivity { private EditText etUsername; private EditText etPassword; private Button btnLogin; private Button btnRegister; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); // 获取控件 etUsername = findViewById(R.id.et_username); etPassword = findViewById(R.id.et_password); etPassword.setTransformationMethod(PasswordTransformationMethod.getInstance()); // 设置密码框显示为 * btnLogin = findViewById(R.id.btn_login); btnRegister = findViewById(R.id.btn_register); // 设置登录按钮点击事件 btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String username = etUsername.getText().toString().trim(); String password = etPassword.getText().toString().trim(); // 判断用户名和密码是否正确 if (username.equals("admin") && password.equals("123456")) { Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(LoginActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show(); } } }); // 设置注册按钮点击事件 btnRegister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(LoginActivity.this, "功能正在开发中", Toast.LENGTH_SHORT).show(); } }); } } ``` ### MainActivity.java ```java package com.example.lvyoutest; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.ViewPager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import com.google.android.material.tabs.TabLayout; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private TabLayout tabLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取控件 viewPager = findViewById(R.id.view_pager); tabLayout = findViewById(R.id.tab_layout); // 初始化选项卡 List<View> views = new ArrayList<>(); List<String> titles = new ArrayList<>(); View musicView = LayoutInflater.from(this).inflate(R.layout.layout_music, null); View friendView = LayoutInflater.from(this).inflate(R.layout.layout_friend, null); View travelView = LayoutInflater.from(this).inflate(R.layout.layout_travel, null); View galleryView = LayoutInflater.from(this).inflate(R.layout.layout_gallery, null); views.add(musicView); views.add(friendView); views.add(travelView); views.add(galleryView); titles.add("音乐"); titles.add("好友"); titles.add("游记"); titles.add("图册"); // 设置音乐模块 TextView tvPlay = musicView.findViewById(R.id.tv_play); TextView tvPause = musicView.findViewById(R.id.tv_pause); TextView tvStop = musicView.findViewById(R.id.tv_stop); tvPlay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 播放音乐 } }); tvPause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 暂停音乐 } }); tvStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 停止音乐 } }); // 设置好友模块 ListView lvFriend = friendView.findViewById(R.id.lv_friend); List<Map<String, Object>> data = new ArrayList<>(); for (int i = 0; i < 10; i++) { Map<String, Object> item = new HashMap<>(); item.put("image", R.drawable.friend); item.put("name", "好友" + i); item.put("time", "2021-12-12"); data.add(item); } String[] from = {"image", "name", "time"}; int[] to = {R.id.iv_friend, R.id.tv_name, R.id.tv_time}; SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_friend, from, to); lvFriend.setAdapter(adapter); // 设置游记模块 ListView lvTravel = travelView.findViewById(R.id.lv_travel); String[] travels = {"游记1", "游记2", "游记3", "游记4", "游记5", "游记6", "游记7", "游记8", "游记9", "游记10"}; ArrayAdapter<String> travelAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, travels); lvTravel.setAdapter(travelAdapter); // 设置图册模块 // TODO: 设置九宫格 // 设置选项卡 TabPagerAdapter adapter1 = new TabPagerAdapter(views, titles); viewPager.setAdapter(adapter1); tabLayout.setupWithViewPager(viewPager); } } ``` ### TabPagerAdapter.java ```java package com.example.lvyoutest; import android.view.View; import androidx.annotation.NonNull; import androidx.viewpager.widget.PagerAdapter; import java.util.List; public class TabPagerAdapter extends PagerAdapter { private List<View> views; private List<String> titles; public TabPagerAdapter(List<View> views, List<String> titles) { this.views = views; this.titles = titles; } @Override public int getCount() { return views.size(); } @NonNull @Override public Object instantiateItem(@NonNull View container, int position) { ((ViewPager) container).addView(views.get(position)); return views.get(position); } @Override public void destroyItem(@NonNull View container, int position, @NonNull Object object) { ((ViewPager) container).removeView(views.get(position)); } @Override public CharSequence getPageTitle(int position) { return titles.get(position); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } } ``` 您需要在 res 目录下创建相应的布局文件,例如 activity_login.xml、activity_main.xml、layout_music.xml、layout_friend.xml、layout_travel.xml、layout_gallery.xml、item_friend.xml 等。您可以根据您的需求进行相应的布局和控件的设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值