仿格瓦拉@电影Android个人中心背景循环动图

只是一个简单的模仿,记一下,万一以后要用.还需要完善

主要控件就是用的这边的

http://blog.csdn.net/lcq5211314123/article/details/48810121

不过,这里边最下面的按钮 DEMO下载  

链接的地址是错的,是个下拉关闭的,所以只能复制代码了.

最烦用这个自定义属性了R.styleable在xml里使用很麻烦,所以就再整理一下

顺便把控件改成三行,因为就用这一处.

package view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;

import com.example.dragrelativelayout.R;

/**
 * 仿格瓦拉App背景自动移动View
 * 原文这边:http://blog.csdn.net/lcq5211314123/article/details/48810121
 */
public class GuevaraView extends View {

	/**遮罩层透明度百分比*/
	private float mAlpha = 0.5f;
	/** 循环移动的速度*/
	private float mSpeed = 4;
	/**循环移动的背景*/
	private Bitmap mBackground0, mBackground1 ,mBackground2;

	private Context mContext;
	/** 屏幕宽度 */
	private int screenWidth;

	/**第一排两张轮播图的的横坐标*/
	private float x00, x01;
	/**第二排两张轮播图的的横坐标*/
	private float x10, x11;
	/**第三排两张轮播图的的横坐标*/
	private float x20, x21;
	private int mBgWidth0, mBgHeight0;
	private int mBgWidth1, mBgHeight1;
	private int mBgWidth2, mBgHeight2;

	private Handler mHandler = new Handler() {
		public void handleMessage(Message msg) {
			x00 -= mSpeed;
			x01 -= mSpeed;
			x10 += mSpeed;
			x11 += mSpeed;
			x20 -= mSpeed;
			x21 -= mSpeed;

			if (x00 <= -mBgWidth0) {// 把第一张移动到第二张后面
				x00 = x01 + mBgWidth0;
			}
			if (x01 <= -mBgWidth0) {// 把第二张移动到第一张后面
				x01 = x00 + mBgWidth0;
			}
			if (x10 >= screenWidth) {
				x10 = x11 - mBgWidth1;
			}
			if (x11 >= screenWidth) {
				x11 = x10 - mBgWidth1;
			}
			if (x20 <= -mBgWidth2) {// 把第一张移动到第二张后面
				x20 = x21 + mBgWidth2;
			}
			if (x21 <= -mBgWidth2) {// 把第二张移动到第一张后面
				x21 = x20 + mBgWidth2;
			}
			invalidate();
			mHandler.sendEmptyMessageDelayed(0, 100);
		};
	};

	public GuevaraView(Context context) {
		super(context);
		mContext = context;

	}
	public GuevaraView(Context context, AttributeSet attrs) {
		super(context, attrs);
		mContext = context;
	}

	public void create() {
		if(mBackground0 == null )
			mBackground0 = BitmapFactory.decodeResource(getResources(),
					R.drawable.aa);
		if(mBackground1 == null)
			mBackground1 = BitmapFactory.decodeResource(getResources(),
					R.drawable.bb);
		if(mBackground2 == null)
			mBackground2 = BitmapFactory.decodeResource(getResources(),
					R.drawable.cc);
		DisplayMetrics dm = new DisplayMetrics();
		WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
		wm.getDefaultDisplay().getMetrics(dm);
		screenWidth = dm.widthPixels;
		mBgWidth0 = mBackground0.getWidth();
		mBgWidth1 = mBackground1.getWidth();
		mBgWidth2 = mBackground2.getWidth();
		mBgHeight0 = mBackground0.getHeight();
		mBgHeight1 = mBackground1.getHeight();
		mBgHeight2 = mBackground2.getHeight();
		x00 = 0;
		x01 = mBgWidth0;
		x10 = screenWidth - mBgWidth1;
		x11 = screenWidth - mBgWidth1 - mBgWidth1;
		x20 = 0;
		x21 = mBgWidth2;

		mHandler.sendEmptyMessageDelayed(0, 0);
	}
	public void start() {
		mHandler.sendEmptyMessageDelayed(0, 0);
	}
	public void stop(){
		mHandler.removeMessages(0);
	}
	public boolean isStop(){
		return !mHandler.hasMessages(0);
	}
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		/**
		 * 指定View的宽度为屏幕宽度,高度为背景高度。
		 */
		int viewHeight = mBgHeight0 +mBgHeight1 +mBgHeight2 
				+ getPaddingTop() + getPaddingBottom();
		setMeasuredDimension(screenWidth, viewHeight);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		/**
		 * 绘制两张背景图
		 */
		canvas.drawBitmap(mBackground0, x00, 0, null);
		canvas.drawBitmap(mBackground0, x01, 0, null);
		canvas.drawBitmap(mBackground1, x10, mBgHeight0, null);
		canvas.drawBitmap(mBackground1, x11, mBgHeight0, null);
		canvas.drawBitmap(mBackground2, x20, mBgHeight0+mBgHeight1, null);
		canvas.drawBitmap(mBackground2, x21, mBgHeight0+mBgHeight1, null);
		/**
		 * 绘制遮罩层
		 */
		canvas.drawARGB((int) (mAlpha * 255), 0, 0, 0);
	}

	@Override
	protected void onDetachedFromWindow() {// 退出时销毁
		super.onDetachedFromWindow();
		mBackground0 = null;
		mBackground1 = null;
		mBackground2 = null;
	}

	/**遮罩层透明度百分比*/
	public void setAlpha(float mAlpha){
		this.mAlpha = mAlpha;
	}
	/** 循环移动的速度*/
	public void setSpeed(float mSpeed){
		this.mSpeed = mSpeed;
	}
	public void setDrawable(int id0 ,int id1 ,int id2){
		mBackground0 = BitmapFactory.decodeResource(getResources(),
				id0);
		mBackground1 = BitmapFactory.decodeResource(getResources(),
				id1);
		mBackground2 = BitmapFactory.decodeResource(getResources(),
				id2);
	}

}

试了一下,没问题,能运行了.

直接用别人博客的demo,把这个给加上去了.

可以到这边下载 http://down.51cto.com/data/2219589

时间: 2024-10-12 16:54:55

仿格瓦拉@电影Android个人中心背景循环动图的相关文章

仿优酷Android客户端图片左右滑动(自动滑动)

最终效果: 页面布局main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent

高仿优酷Android客户端图片左右滑动(自动切换)

本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和门户网站都有类似的实现: 具体思路: 1. 工程中需要添加android-support-v4.jar,才能使用ViewPager控件. 2. 图片的自动切换: 可使用Timer或者ScheduledExecutorService,这个有多重方式可以实现. 同时要切换底部的dots(园点) 3.Handler+Message机制更新UI,这个相信大家都很熟练,不再描述 4. 实现的一些细节:注意本例中的优

仿微米网Android客户端全部UI_Android源码

仿微米网Android客户端全部UI 下载地址:http://www.dwz.cn/wmCOl 源码运行截图 首页                                                                     群组 微米圈                                                                   联系人 个人中心                                          

自定义绘制android EditText的背景,定义EditText文字的显示样式

EditText可以通过layer-list来绘制背景: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle" //框为矩形 > &l

android如何写一个循环文字滚动的TextView

效果图: 在layout中这样来声明: <com.kaixin001.view.ScrollText android:id="@+id/news_statustxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" android:paddingRight="1

(转)Android 自定义 spinner (背景、字体颜色)

Android 自定义 spinner (背景.字体颜色) (2012-07-04 17:04:44)   1.准备两张图片,并做好9.png 2.在drawable中定义spinner_selector.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" &

2d背景循环

using UnityEngine; using System.Collections; /// <summary> /// 2d背景循环滚动 /// </summary> public class Test : MonoBehaviour { public float xScrollSpeed=0.1f; public float yScrollSpeed=0f; void Update() { float offsetX = Time.time * xScrollSpeed;

仿微米网Android客户端全部UI源码

支持平台:Android 运行环境:Eclipse 开发语言:Java 下载地址:http://www.devstore.cn/code/info/208.html 源码简介 仿微米网Android客户端全部UI 源码运行截图

Android view更改背景资源,padding消失的问题

这个需求一般不常用,不过遇到也挺郁闷的.这个应该算是SDK的一个bug,解决的办法,就是设置之前记录下来他的边距, 然后在设置回去. 具体方法 /** * 设置不改变padding的背景 * 因为android有设置背景后,padding无效的问题 * * @param view * @param resId * @autor wujiajun */ public static void setBackgroundResourceWithPadding(View view, int resId)