最近在研究如何做出仿微信,仿新浪等应用,第一次安装使用的使用展示应用程序的新特性和用法。
实现功能:左右手势滑屏
底部小圆点随当前显示页跳动
浮动按钮显示。当触屏事件发生显示,否则就渐渐消失
先转个文章:http://blog.csdn.net/feng88724/article/details/6973662
第一种: ViewFlipper + GestureDetector
第二种: ActivityGroup + GestureDetector
第三种: ViewPager (Android3.0+)
第四种: ViewFlow (开源项目)
话不多说,先放上效果图
向右滑动,或者点击按钮向右
怎么样,是不是很心动~~~!哈哈、
实现左右滑屏是需要一个叫做ViewPager的东西。具体ViewPager怎么用我就不赘述了。(PS注意导入ViewPager的兼容包)
接下来是代码:
首先在main.xml中声明ViewPager:
<LinearLayout
android:id="@+id/linearLayout01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/guidePages"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
和一个viewGroup放小圆点
<LinearLayout
android:id="@+id/viewGroup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="40dp"
android:gravity="center_horizontal"
android:orientation="horizontal" >
</LinearLayout>
接着在item01.xml等几个xml中放置要显示的图片,因为几个都一样,就不都贴上来了。
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/feature_guide_0" >
</ImageView>
接下来是核心代码:
public class GuideViewActivity extends Activity {
private ViewPager viewPager;
private ArrayList<View> pageViews;
private ImageView imageView;
private ImageView[] imageViews;
// 包裹滑动图片LinearLayout
private ViewGroup main;
// 包裹小圆点的LinearLayout
private ViewGroup group;
//左箭头按钮
private ImageView imageViewLeft;
//右箭头按钮
private ImageView imageViewRight;
//当前页码
private int currentIndex;
//ImageView的alpha值
private int mAlpha = 0;
private boolean isHide;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将要显示的图片放到ArrayList当中,存到适配器中
LayoutInflater inflater = getLayoutInflater();
pageViews = new ArrayList<View>();
pageViews.add(inflater.inflate(R.layout.item01, null));
...
imageViews = new ImageView[pageViews.size()];
main = (ViewGroup)inflater.inflate(R.layout.main, null);
group = (ViewGroup)main.findViewById(R.id.viewGroup);
viewPager = (ViewPager)main.findViewById(R.id.guidePages);
imageViewLeft = (ImageView)main.findViewById(R.id.imageView1);
imageViewRight = (ImageView)main.findViewById(R.id.imageView2);
imageViewLeft.setAlpha(0);
imageViewRight.setAlpha(0);
//将小圆点放到imageView数组当中
for (int i = 0; i < pageViews.size(); i++) {
imageView = new ImageView(GuideViewActivity.this);
imageView.setLayoutParams(new LayoutParams(20,20));
imageView.setPadding(20, 0, 20, 0);
imageViews[i] = imageView;
if (i == 0) {
//默认选中第一张图片
imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);
} else {
imageViews[i].setBackgroundResource(R.drawable.page_indicator);
}
group.addView(imageViews[i]);
}
setContentView(main);
viewPager.setAdapter(new GuidePageAdapter());
viewPager.setOnPageChangeListener(new GuidePageChangeListener());
imageViewLeft.setOnClickListener(new ButtonListener());
imageViewRight.setOnClickListener(new ButtonListener());
}
//左右切换屏幕的按钮监听器
class ButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int showNext=0;
if(v.getId() == R.id.imageView1) {
System.out.println("点击了向左的按钮");
if(currentIndex ==0 )
showNext = currentIndex;
else
showNext = currentIndex-1;
viewPager.setCurrentItem(showNext);
}
if(v.getId() == R.id.imageView2){
System.out.println("点击了向右的按钮");
if(currentIndex == imageViews.length)
showNext = currentIndex;
else
showNext = currentIndex+1;
viewPager.setCurrentItem(showNext);
}
System.out.println("当前页码:"+showNext);
}
}
/**
* 设置按钮渐显效果
*/
private Handler mHandler = new Handler()
{
public void handleMessage(Message msg) {
if(msg.what==1 && mAlpha<255){
//通过设置不透明度设置按钮的渐显效果
mAlpha += 50;
if(mAlpha>255)
mAlpha=255;
imageViewLeft.setAlpha(mAlpha);
imageViewLeft.invalidate();
imageViewRight.setAlpha(mAlpha);
imageViewRight.invalidate();
if(!isHide && mAlpha<255)
mHandler.sendEmptyMessageDelayed(1, 100);
}else if(msg.what==0 && mAlpha>0){
mAlpha -= 3;
if(mAlpha<0)
mAlpha=0;
imageViewLeft.setAlpha(mAlpha);
imageViewLeft.invalidate();
imageViewRight.setAlpha(mAlpha);
imageViewRight.invalidate();
if(isHide && mAlpha>0)
mHandler.sendEmptyMessageDelayed(0, 2);
}
}
};
private void showImageButtonView(){
isHide = false;
mHandler.sendEmptyMessage(1);
}
private void hideImageButtonView(){
new Thread(){
public void run() {
try {
isHide = true;
mHandler.sendEmptyMessage(0);
} catch (Exception e) {
;
}
}
}.start();
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
System.out.println("this is dispatch");
System.out.println("触碰屏幕");
switch (ev.getAction()) {
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_DOWN:
showImageButtonView();
break;
case MotionEvent.ACTION_UP:
hideImageButtonView();
break;
}
return super.dispatchTouchEvent(ev);
}
// 指引页面数据适配器,实现适配器方法
class GuidePageAdapter extends PagerAdapter {
@Override
public int getCount() {
return pageViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return super.getItemPosition(object);
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
// TODO Auto-generated method stub
((ViewPager) arg0).removeView(pageViews.get(arg1));
}
@Override
public Object instantiateItem(View arg0, int arg1) {
// TODO Auto-generated method stub
((ViewPager) arg0).addView(pageViews.get(arg1));
return pageViews.get(arg1);
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View arg0) {
// TODO Auto-generated method stub
}
@Override
public void finishUpdate(View arg0) {
// TODO Auto-generated method stub
}
}
// 指引页面更改事件监听器,左右滑动图片时候,小圆点变换显示当前图片位置
class GuidePageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
currentIndex = arg0;
for (int i = 0; i < imageViews.length; i++) {
imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);
if (arg0 != i) {
imageViews[i].setBackgroundResource(R.drawable.page_indicator);
}
}
}
}
}
啊~到这里就都实现了~
分享到:
相关推荐
本项目以“高仿新浪微博的引导界面”为主题,旨在教授如何在Android平台上创建类似新浪微博启动时的引导页效果。这种效果通常由多张图片滑动展示,配合简单的动画效果,让新用户对应用有直观的认识。 【描述】: ...
这个项目"Android新浪微博完整例子"是一个很好的实践,可以帮助开发者深入理解Android应用开发的全貌,从用户交互到后端数据处理的每一个环节。通过学习和分析这个项目,开发者可以提升自己的技能,为未来更复杂的...
标题“Android客户端接入新浪微博”揭示了本主题的核心——在Android应用程序中集成新浪微博的功能,以便用户可以登录、分享内容、互动等。这涉及到Android开发、网络通信、OAuth授权以及社会化媒体API的使用。 ...
在Android应用中,通常需要引导用户跳转到新浪的OAuth授权页面,用户同意授权后,新浪会返回一个访问令牌,应用可以凭此令牌进行后续的API调用。 具体实现时,Android开发者需要集成新浪SDK,该SDK包含了OAuth认证...
在《手把手教你用Android开发新浪微博客户端》这本书中,作者会逐步引导读者完成以上所有步骤,包括设置项目、获取API权限、设计UI、实现网络请求以及处理数据。书中的实例代码和详细解释将帮助初学者快速掌握...
本篇文章将详细介绍如何在Android项目中实现一个类似新浪启动界面的欢迎引导页面。 首先,我们需要设计引导页面的UI。这通常包括一系列具有吸引力的静态图片或者动画,展示应用的主要特点。在Android Studio中,...
"android新浪微博demo"是一个实例项目,展示了如何在Android应用中集成新浪微博的功能,并提供了许多微博特效的实现,这对于开发者来说是一个很好的学习和参考资源。这个项目要求将SDK升级至版本24,这意味着它可能...
此项目"Android新浪微博案例源码"提供了一个完整的示例,可以帮助开发者深入理解这些技术并实现类似的功能。下面我们将详细探讨这个案例中的关键知识点。 1. **OAuth认证**:在Android应用中接入微博服务,首先需要...
在Android应用开发中,接入第三方社交媒体平台如新浪、腾讯、网易和搜狐的微博服务,通常涉及到OAuth认证。OAuth(开放授权)是一种授权协议,允许应用在用户授权的情况下,获取访问特定资源的权限,而无需分享用户...
你需要在应用中实现一个授权流程,引导用户跳转到新浪的授权页面,用户同意授权后,会回调到你在注册应用时设置的回调地址。在这个过程中,你会获得一个Access Token,用于后续的API调用。 4. **启动授权流程**: ...
《Android新浪微博开发详解》 这份名为“Android新浪微博PPT”的资料是针对Android平台上新浪微博应用的开发进行详尽解析的教程。它涵盖了从基础到高级的各种知识点,旨在帮助开发者深入理解如何构建一个完整的微博...
本文将围绕“Android源码——新浪微博客户端源码”这一主题,展开对Android微博客户端源码的深度解析。 首先,从标题和描述来看,我们可以推测这是一份关于Android平台上的新浪微博客户端的开源代码。这份源码可能...
3. **OAuth授权**:新浪开放平台采用OAuth 2.0协议进行身份验证,开发者需要了解OAuth的基本原理,如何获取应用的AppKey和AppSecret,以及如何引导用户授权并获取Access Token,以便后续调用API。 4. **JSON解析**...
在Android平台上进行社交媒体应用开发时,常常需要集成第三方社交平台,如新浪和腾讯微博,以便用户能够方便地授权登录和分享内容。这个压缩包文件"wb-test"显然包含了一个针对这两种微博平台的授权和发微功能的...
《安卓Android源码——四次元新浪微博客户端项目》 这个项目是针对安卓平台的一个开源实现,旨在解析并展示了新浪微博客户端的源代码。源码分析对于开发者来说是宝贵的资源,能够帮助我们深入理解移动应用的开发...
2. 用户授权:通过SDK提供的方法启动授权界面,引导用户进行授权操作。 3. 处理回调:当用户授权后,系统会回调指定的Activity或BroadcastReceiver,处理返回的授权码或错误信息。 4. 获取Access Token:根据授权码...
- **发起授权请求**:在Android应用中,引导用户跳转到微博的授权页面,传递`App Key`和预设的回调地址。 - **用户授权**:用户同意授权后,微博会将授权码发送到你设定的回调地址。 - **换取Access Token**:...
这个源码是类似新浪微博iPhone版引导界面,源码AndroidAnimationDemo,The project is only in the Samsung Note 3 Android 4.4 on the test is successful! 本项目仅在三星 Note 3 Android 4.4上测试成功! 更新 ...
这个压缩包"安卓Android源码——新浪微博+九宫格快捷分享.zip"提供了一个具体的示例,它包含了一个实现新浪微博分享功能以及九宫格快捷选择功能的应用源码。下面我们将深入探讨其中涉及的关键知识点。 1. **安卓...
这个压缩包"安卓Android源码——新浪、腾讯、网易、搜狐微博OAuth认证整合Android版.zip"提供了针对四大中国主流社交媒体平台——新浪、腾讯、网易和搜狐的OAuth认证整合示例代码,这对于开发者来说是宝贵的资源,...