Pretty UI Design For Android -- 滑动背景、透明列表

本文是从国外一个网上看到的效果,感觉很不错,就简化了一下代码,拿来用了,先看下效果图:

效果还是很不错的,下面让我们看看是如何实现的:

看看文字来源,很简单,是一个数组:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="list_content">
        <item>If I could save time in a bottle </item>
        <item>the first thing that I\'d like to do </item>
        <item>is to save every day until eternity passes away </item>
        <item>just to spend them with you </item>
        <item>If I could save time in a bottle </item>
        <item>the first thing that I\'d like to do </item>
        <item>is to save every day until eternity passes away </item>
        <item>just to spend them with you </item>
        <item>If I could make days last forever </item>
        <item>if words could make wishes come true </item>
        <item>I\'d save every day like a treasure and then </item>
        <item>again I would spend them with you  </item>
        <item>Thank you for comforting me when I\'m sad </item>
        <item>Loving me when I\'m mad </item>
        <item>Picking me up when I\'m down </item>
        <item>Thank you for being my friend and being around </item>
        <item>Teaching me the meaning of love </item>
        <item>Encouraging me when I need a shove </item>
        <item>But most of all thank you for  </item>
        <item>Loving me for who I am  </item>
    </string-array>

</resources>

布局也很简单:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.scrolltest.TopCenterImageView
        android:id="@+id/bg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/image" />

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@null"/>

</FrameLayout>

因为我们是用的一个listview来显示的,所以这样做就是最简单的了。

ok下面我们来看看程序是怎样的:

package com.example.scrolltest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.LayoutParams;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

	private TopCenterImageView bg;
	private ListView list;
	private View head;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		bg = (TopCenterImageView) findViewById(R.id.bg);
		list = (ListView) findViewById(R.id.list);
		list.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item,
				getResources().getStringArray(R.array.list_content)));

		head = new View(this);
		head.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 700));
		list.addHeaderView(head);

		list.setOnScrollListener(new OnScrollListener() {

			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
			}

			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				int top = head.getTop() / 2;
				bg.setTop(top);
			}
		});
	}
}

其中有一个TopCenterImageView,相信大家会比较疑惑,让我们来看看他是什么:

package com.example.scrolltest;

import android.content.Context;
import android.graphics.Matrix;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
 * Custom view allowing an image to be displayed with a "top crop" scale type
 *
 * @author Nicolas POMEPUY
 *
 */
public class TopCenterImageView extends ImageView {

	public TopCenterImageView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		setScaleType(ScaleType.MATRIX);
	}

	public TopCenterImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		setScaleType(ScaleType.MATRIX);
	}

	public TopCenterImageView(Context context) {
		super(context);
		setScaleType(ScaleType.MATRIX);
	}

	/**
	 * Top crop scale type
	 */
	@Override
	protected boolean setFrame(int l, int t, int r, int b) {
		if (getDrawable() == null) {
			return super.setFrame(l, t, r, b);
		}
		Matrix matrix = getImageMatrix();
		float scaleFactor = getWidth() / (float) getDrawable().getIntrinsicWidth();
		matrix.setScale(scaleFactor, scaleFactor);
		setImageMatrix(matrix);
		return super.setFrame(l, t, r, b);
	}

}

这个重写的ImageView是为了能够设置ImageView的大小,让他符合我们的背景,注释写的很清楚:Custom view allowing an image to be displayed with a "top crop" scale type

这时候大家再看代码就很清楚了吧,效果还是很赞的~

以上。

时间: 2024-10-18 20:30:07

Pretty UI Design For Android -- 滑动背景、透明列表的相关文章

向产品宣战——开发者眼中的Android UI Design

向产品宣战--开发者眼中的Android UI Design 准备了半个月,思考产品设计.交互设计,见证了公司的产品.UE和开发的撕逼,将自己的思考.感悟,整理成下文,谨代表广大程序猿,向设计狮.产品X开战.希望广大程序猿能够坚持贯彻Google的Material Design,切实认真负责的执行Android的设计思想,将MD设计带到产品中去,不做中国特色的App,将Android的开发风气带到正轨,树立正确的开发观.设计观. 希望广大程序猿朋友在博客后面留言.签名,规范Android设计.树

Android设置窗体Activity背景透明

背景透明 style.xml <item name="android:windowBackground">@color/transparent</item> <item name="android:windowIsTranslucent">true</item>

Android编程实现设置按钮背景透明与半透明及图片背景透明的方法_Android

本文实例讲述了Android编程实现设置按钮背景透明与半透明及图片背景透明的方法.分享给大家供大家参考,具体如下: Button或者ImageButton的背景设为透明或者半透明: 半透明 复制代码 代码如下: <Button android:background="#e0000000" ... /> 透明 复制代码 代码如下: <Button android:background="#00000000" ... /> 颜色和不透明度 (al

Android编程实现对话框Dialog背景透明功能示例

本文实例讲述了Android编程实现对话框Dialog背景透明功能.分享给大家供大家参考,具体如下: 先看效果: 这是我做的一个拨号器强的面板,拨号的时候会查询手机中的联系人,显示在拨号面板上方,点击弹出透明对话框供选择. 这次重点是透明对话框. 先看对话框的theme,style文件: <?xml version="1.0" encoding="utf-8"?> <resources> <style name="select

Android滑动冲突的完美解决方案_Android

关于滑动冲突 在Android开发中,如果是一些简单的布局,都很容易搞定,但是一旦涉及到复杂的页面,特别是为了兼容小屏手机而使用了ScrollView以后,就会出现很多点击事件的冲突,最经典的就是ScrollView中嵌套了ListView.我想大部分刚开始接触Android的同学们都踩到过这个坑,下面跟着小编一起来看看解决方案吧.. 同方向滑动冲突 比如ScrollView嵌套ListView,或者是ScrollView嵌套自己 这里先看一张效果图 上图是在购物软件上常见的上拉查看图文详情,关

qt-Qt中设置窗口背景透明

问题描述 Qt中设置窗口背景透明 我用Qt5, 新建工程自动生成的dialog窗口. 在dialog.cpp中加了 setWindowFlags(Qt::FramelessWindowHint); 再在ui界面中设置qss,加入带透明部分的背景图片,就是用的background-image 这样的话背景透明部分就是白的. 如果加上background-color:transparent; 背景透明部分就是黑的了 然后我上网查了一下加了两句 setWindowOpacity(1); setAttr

Mobile UI Design Patterns: 10+ Sites for Inspiration

原文:http://sixrevisions.com/user-interface/mobile-ui-design-patterns-inspiration/ User interface design patterns are solutions to common design challenges, such as navigating around an app, listing data or providing feedback to users. Mobile apps and

activity-Android:localActivityManager将Activity转化为View,View的背景透明问题?

问题描述 Android:localActivityManager将Activity转化为View,View的背景透明问题? (1):在ActivityGroup中, getLocalActivityManager().startActivity("activity01",new Intent(this, AActivity.class)).getDecorView();获取到要加载的多个Activity放入viewPager,但是总页面的背景希望使用ActivityGroup的背景,

Android滑动到顶部和底部时出现的阴影如何去掉_Android

android去掉滑动到顶部和底部的阴影 <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:divider="@color/line_color"