热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android抽屉式Activity(人人网所用(有图有真相))

---------------------------main.xml

---------------------------main.xml


android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >



android:id="@+id/slidedout_cover"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY" />


------------------------blog.xml


android:id="@+id/inner_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/white" >

android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="45dip"
android:background="#bb000000"
android:gravity="center_vertical"
android:orientation="horizontal" >

android:id="@+id/sample_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dip"
android:background="@drawable/right" />

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="I hate working 公子白"
android:textColor="#ffffff"
android:textSize="19sp" />

xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="40dip" />

------------------------------.主JAVA

package slidre.co.cc;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.TranslateAnimation;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout.LayoutParams;

public class SettingActivity extends
Activity {

private ImageView mCover;
private ListView mList;
private Animation mStartAnimation;
private Animation mStopAnimation;
private static final int DURATION_MS = 400;
private static Bitmap sCoverBitmap = null;
String loveyouString[] = new String[] {
"公子白工作室", "帅哥 帅哥 帅哥 帅哥",
"帅哥", "美女", "帅哥 帅哥 帅哥",
"帅哥 帅哥 帅哥 帅哥", "帅哥 帅哥 帅哥",
"地上的娃娃笑哈哈" };

// 2个步骤
// 1. activity-->other activity
// 2. anim
// 先切换到另一个activity
// 再获得之前activity屏幕的快照将它作为一个cover覆盖在下一个屏幕的上面,然后通过动画移动这个cover,让人感觉好像是前一个屏幕的移动。

public static void prepare(
Activity activity, int id) {
if (sCoverBitmap != null) {
sCoverBitmap.recycle();
}
// 用指定大小生成一张透明的32位位图,并用它构建一张canvas画布
sCoverBitmap = Bitmap
.createBitmap(
activity.findViewById(
id)
.getWidth(),
activity.findViewById(
id)
.getHeight(),
Config.ARGB_8888);
Canvas canvas = new Canvas(
sCoverBitmap);
// 将指定的view包括其子view渲染到这种画布上,在这就是上一个activity布局的一个快照,现在这个bitmap上就是上一个activity的快照
activity.findViewById(id).draw(
canvas);
}

@Override
public void onCreate(
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 绝对布局最上层覆盖了一个imageview
setContentView(R.layout.main);
initAnim();
mCover = (ImageView) findViewById(R.id.slidedout_cover);
mCover.setImageBitmap(sCoverBitmap);
mCover.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
close();
}
});
mList = (ListView) findViewById(R.id.list);
mList.setAdapter(new ArrayAdapter(
SettingActivity.this,
android.R.layout.simple_list_item_1,
loveyouString));
mList.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(
AdapterView arg0,
View arg1,
int arg2, long arg3) {
// if (String[0]) {
//
// }
//
if (arg2 == 1) {
Intent intent = new Intent(
SettingActivity.this,
Gongzibai.class);
startActivity(intent);
finish();

}

if (arg2==3) {

Intent intent1 = new Intent(
SettingActivity.this,
Gongzibai1.class);
startActivity(intent1);
finish();

}
close();

}
});
open();
}

public void initAnim() {

// 采用了绝对布局,绝对布局是view的左上角从(0,0)开始
@SuppressWarnings("deprecation")
final android.widget.AbsoluteLayout.LayoutParams lp = new android.widget.AbsoluteLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT,
0, 0);
findViewById(
R.id.slideout_placeholder)
.setLayoutParams(lp);

// 屏幕的宽度
int displayWidth = ((WindowManager) getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay()
.getWidth();
// 右边的位移量,60dp转换成px
int sWidth = (int) TypedValue
.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
60,
getResources()
.getDisplayMetrics());
// 将快照向右移动的偏移量
final int shift = displayWidth
- sWidth;

// 向右移动的位移动画向右移动shift距离,y方向不变
mStartAnimation = new TranslateAnimation(
TranslateAnimation.ABSOLUTE,
0,
TranslateAnimation.ABSOLUTE,
shift,
TranslateAnimation.ABSOLUTE,
0,
TranslateAnimation.ABSOLUTE,
0);

// 回退时的位移动画
mStopAnimation = new TranslateAnimation(
TranslateAnimation.ABSOLUTE,
0,
TranslateAnimation.ABSOLUTE,
-shift,
TranslateAnimation.ABSOLUTE,
0,
TranslateAnimation.ABSOLUTE,
0);
// 持续时间
mStartAnimation
.setDuration(DURATION_MS);
// 动画完成时停留在结束位置
mStartAnimation
.setFillAfter(true);
mStartAnimation
.setAnimationListener(new AnimationListener() {

@Override
public void onAnimationStart(
Animation animation) {
}

@Override
public void onAnimationRepeat(
Animation animation) {
}

@Override
public void onAnimationEnd(
Animation animation) {
// 动画结束时回调
// 将imageview固定在位移后的位置
mCover.setAnimation(null);
@SuppressWarnings("deprecation")
final android.widget.AbsoluteLayout.LayoutParams lp = new android.widget.AbsoluteLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT,
shift,
0);
mCover.setLayoutParams(lp);
}
});

mStopAnimation
.setDuration(DURATION_MS);
mStopAnimation
.setFillAfter(true);
mStopAnimation
.setAnimationListener(new AnimationListener() {

@Override
public void onAnimationStart(
Animation animation) {
}

@Override
public void onAnimationRepeat(
Animation animation) {
}

@Override
public void onAnimationEnd(
Animation animation) {
finish();
overridePendingTransition(
0, 0);
}
});

}

public void open() {
mCover.startAnimation(mStartAnimation);
}

public void close() {
mCover.startAnimation(mStopAnimation);
}

@Override
public boolean onKeyDown(
int keyCode, KeyEvent event) {
// 摁返回键时也要触发动画
if (keyCode == KeyEvent.KEYCODE_BACK) {
close();
return true;
}
return super.onKeyDown(keyCode,
event);
}
}

-----------------------项目.AVTIVITY

package slidre.co.cc;

import cn.mapplayer.engine.MiidiCredit;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class SliderActivity extends
Activity {
@Override
protected void onCreate(
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


setContentView(R.layout.sample);
findViewById(R.id.sample_button)
.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(
View v) {
SettingActivity
.prepare(
SliderActivity.this,
R.id.inner_content);
startActivity(new Intent(
SliderActivity.this,
SettingActivity.class));
overridePendingTransition(
0,
0);
}
});
}
}

------------------加上权限ACTIVITY 以及网络



推荐阅读
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
author-avatar
骑马的仓鼠
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有