欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

中心打開效果 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網站建設-昆明葵宇信息科技有限公司

159-8711-8523

云南網建設/小程序開發(fā)/軟件開發(fā)

知識

不管是網站,軟件還是小程序,都要直接或間接能為您產生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站成為營銷工具,讓軟件能切實提升企業(yè)內部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當前位置>首頁 » 新聞資訊 » 技術分享 >

中心打開效果

發(fā)表時間:2020-10-19

發(fā)布人:葵宇科技

瀏覽次數:26


效不雅圖:
如今給加大年夜分享一下打開Activity時中間打開的效不雅。
思路:
1.在設置打開目標Aitivity的時,先獲取當前Acitivty,設置瓜分的背景的坐標。
2.當目標Activity打開之前,根據瓜分的坐標,創(chuàng)建ImageView,高低兩部分,并且添加到目標Activity中。
3.最后設置高低兩部分IMageView的動畫,是他們一路開啟動畫。
4.當動畫停止后,要把目標Activity中的添加的兩個ImageView移除掉落。


下面經由過程代率攀來實現:
設置開啟目標Activity


public static void startActivity(Activity currActivity, Intent intent,
			int splitYCoord) {

		// 預備一個BItMap圖片,是當前的Activity界面作為的背景
		prepare(currActivity, splitYCoord);

		currActivity.startActivity(intent);
		currActivity.overridePendingTransition(0, 0);
	}
currActivity:當前的Activity
intent:開啟新的Activity的Intent
splitYCoord:想去瓜分Activity的縱坐標,-1表示平等的大年夜中心瓜分
在這個辦法里,最重要的功能獲取當前Acitivity界面作為一個Bitmap
private static void prepare(Activity currActivity, int splitYCoord) {

		// 獲取當前的Activity,作為一個BItMap
		View root = currActivity.getWindow().getDecorView()
				.findViewById(android.R.id.content);
		root.setDrawingCacheEnabled(true);
		mBitmap = root.getDrawingCache();

		// If the split Y coordinate is -1 - We'll split the activity equally
		splitYCoord = (splitYCoord != -1 ? splitYCoord
				: mBitmap.getHeight() / 2);

		if (splitYCoord > mBitmap.getHeight())
			throw new IllegalArgumentException("Split Y coordinate ["
					+ splitYCoord + "] exceeds the activity's height ["
					+ mBitmap.getHeight() + "]");

		// 設置給兩個高低BitMap的坐標,是給目標Activity制造的動畫的ImageView供給的坐標
		mLoc1 = new int[] { 0, splitYCoord, root.getTop() };
		mLoc2 = new int[] { splitYCoord, mBitmap.getHeight(), root.getTop() };
	}

主如果獲取當前的Activity的內容,生成一個BitMap,然后根據瓜分標記,把瓜分的高低兩部分ImageView的坐標劃攙扶來

在目標的Activity中oncreate()的Activity的onCreate()中的setContentView()前面調用預備動畫
public static void prepareAnimation(final Activity destActivity) {
		mTopImage = createImageView(destActivity, mBitmap, mLoc1);
		mBottomImage = createImageView(destActivity, mBitmap, mLoc2);
	}
創(chuàng)建瓜分的ImageView,并且添加到目標Activity的窗體上

private static ImageView createImageView(Activity destActivity, Bitmap bmp,
			int loc[]) {
		MyImageView imageView = new MyImageView(destActivity);
		imageView.setImageBitmap(bmp);
		imageView.setImageOffsets(bmp.getWidth(), loc[0], loc[1]);

		WindowManager.LayoutParams windowParams = new WindowManager.LayoutParams();
		windowParams.gravity = Gravity.TOP;
		windowParams.x = 0;
		windowParams.y = loc[2] + loc[0];
		windowParams.height = loc[1] - loc[0];
		windowParams.width = bmp.getWidth();
		windowParams.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
		windowParams.format = PixelFormat.TRANSLUCENT;
		windowParams.windowAnimations = 0;
		destActivity.getWindowManager().addView(imageView, windowParams);

		return imageView;
	}

public static void animate(final Activity destActivity, final int duration,
			final TimeInterpolator interpolator) {

		// Post this on the UI thread's message queue. It's needed for the items
		// to be already measured
		new Handler().post(new Runnable() {

			@Override
			public void run() {
				mSetAnim = new AnimatorSet();
				mTopImage.setLayerType(View.LAYER_TYPE_HARDWARE, null);
				mBottomImage.setLayerType(View.LAYER_TYPE_HARDWARE, null);
				mSetAnim.addListener(new Animator.AnimatorListener() {
					@Override
					public void onAnimationStart(Animator animation) {
					}

					@Override
					public void onAnimationEnd(Animator animation) {
						clean(destActivity);
					}

					@Override
					public void onAnimationCancel(Animator animation) {
						clean(destActivity);
					}

					@Override
					public void onAnimationRepeat(Animator animation) {

					}
				});

				// Animating the 2 parts away from each other
				Animator anim1 = ObjectAnimator.ofFloat(mTopImage,
						"translationY", mTopImage.getHeight() * -1);
				Animator anim2 = ObjectAnimator.ofFloat(mBottomImage,
						"translationY", mBottomImage.getHeight());

				if (interpolator != null) {
					anim1.setInterpolator(interpolator);
					anim2.setInterpolator(interpolator);
				}

				mSetAnim.setDuration(duration);
				mSetAnim.playTogether(anim1, anim2);
				mSetAnim.start();
			}
		});
	}

當動畫停止,移除目標Activity的ImageView。

private static void clean(Activity activity) {
		if (mTopImage != null) {
			mTopImage.setLayerType(View.LAYER_TYPE_NONE, null);
			try {
				// If we use the regular removeView() we'll get a small UI
				// glitch
				activity.getWindowManager().removeViewImmediate(mBottomImage);
			} catch (Exception ignored) {
			}
		}
		if (mBottomImage != null) {
			mBottomImage.setLayerType(View.LAYER_TYPE_NONE, null);
			try {
				activity.getWindowManager().removeViewImmediate(mTopImage);
			} catch (Exception ignored) {
			}
		}

		mBitmap = null;
	}






履行次序:startActivity-->prepareAnimation----->animate
如不雅想給其他View設置中間打開效不雅,那么就按照這三步履行即可


應用步調:
我這是創(chuàng)建了一個BaseActivity,把預備動畫和開啟動畫放在了BaseAcitivity中
activity01.xml

<RelativeLayout 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"
    tools:context="com.yzk.centersplit.activity.Activity2" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/num1"
        android:gravity="center"
        android:text="我是美男一號"
        android:textColor="@android:color/holo_blue_light"
        android:textSize="30sp" />

</RelativeLayout>
activity02.xml

<RelativeLayout 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"
    tools:context="com.yzk.centersplit.activity.Activity2" >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:background="@drawable/num2"
        android:gravity="center"
        android:text="我是不是很萌"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="30sp" />

</RelativeLayout>
activity03.xml


<RelativeLayout 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"
    tools:context="com.yzk.centersplit.activity.Activity2" >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:background="@drawable/bg3"
        android:gravity="center"
        android:text="風景是不是很美"
        android:textColor="@android:color/holo_orange_dark"
        android:textSize="30sp" />

</RelativeLayout>
activity04.xml

<RelativeLayout 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"
    tools:context="com.yzk.centersplit.activity.Activity2" >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:background="@drawable/bg4"
        android:gravity="center"
        android:text="想不想擁有一個豪車"
        android:textColor="@android:color/holo_red_dark"
        android:textSize="30sp" />

</RelativeLayout>

BaseActivity.java

public class BaseActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// 預備好動畫,創(chuàng)建了上一個Activity的以中心為線
		ActivitySplitAnimationUtil.prepareAnimation(this);
		super.onCreate(savedInstanceState);
		// 開啟動畫
		ActivitySplitAnimationUtil.animate(this, 2000);
	}
}

Activity1.java
public class Activity1 extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity01);
		findViewById(R.id.button).setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 此時就會把當前的activity作為中心瓜分動畫的背景了
				ActivitySplitAnimationUtil.startActivity(Activity1.this,
						new Intent(Activity1.this, Activity2.class));
			}
		});
	}
}
Activity2.java


public class Activity2 extends BaseActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity02);
		findViewById(R.id.button).setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				ActivitySplitAnimationUtil.startActivity(Activity2.this,
						new Intent(Activity2.this, Activity3.class));
			}
		});
	}

}
Activity3.java
public class Activity3 extends BaseActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity03);
		findViewById(R.id.button).setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				ActivitySplitAnimationUtil.startActivity(Activity3.this,
						new Intent(Activity3.this, Activity4.class));
			}
		});
	}

}
Activity4.java
public class Activity4 extends BaseActivity {

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

}



源碼下載:http://download.csdn.net/detail/forwardyzk/8332101
如不雅效不雅圖看不到,請應用360安然瀏覽器查看。不知道為什么在谷歌瀏覽器上gif圖片顯示不出來。
知道如何解決的請給你建議。
[img]http://img.blog.csdn.net/20150106144714639
private static class MyImageView extends ImageView {
		private Rect mSrcRect;
		private Rect mDstRect;
		private Paint mPaint;

		public MyImageView(Context context) {
			super(context);
			mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
		}

		/**
		 * Setting the bitmap offests to control the visible area
		 * 
		 * @param width
		 *            The bitmap image
		 * @param bmp
		 *            The start Y position
		 * @param loc
		 *            The end Y position
		 * @return
		 */
		public void setImageOffsets(int width, int startY, int endY) {
			mSrcRect = new Rect(0, startY, width, endY);
			mDstRect = new Rect(0, 0, width, endY - startY);
		}

		@Override
		protected void onDraw(Canvas canvas) {
			Bitmap bm = null;
			Drawable drawable = getDrawable();
			if (null != drawable && drawable instanceof BitmapDrawable) {
				bm = ((BitmapDrawable) drawable).getBitmap();
			}

			if (null == bm) {
				super.onDraw(canvas);
			} else {
				canvas.drawBitmap(bm, mSrcRect, mDstRect, mPaint);
			}
		}
	}
開啟動畫

相關案例查看更多