android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
2014-09-26 17:36
295 查看
原地址:http://blog.csdn.net/vipzjyno1/article/details/23872695
这一系列博文都是:(android高仿系列)今日头条
--新闻阅读器 (一)
开发中碰到问题之后实现的,觉得可能有的开发者用的到或则希望独立成一个小功能DEMO,所以就放出来这么一个DEMO。
原本觉得是最后完成后发网站客户端的,可是这样体现不出一个功能一个功能的分析实现效果,而且周期时间长,所以就完成一部分,发一部分,敬请谅解。
下面的菜单弹出效果在很多的新闻阅读器上都有,比如今日头条、360新闻等。下
![](http://img.my.csdn.net/uploads/201404/16/1397651185_4296.gif)
其实这个实现起来很简单,看其效果,其实就是一个PopupWindow,之后设定相应postion的按钮点击属性,之后获取按钮的位置,给它设置动画显示消失就可以出现了。
下面看看代码的思路:
由于整体是一个LISTVIEW,所以我把点击的事件写到了对应的Adapter适配器中。
[java] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
public class MyAdapter extends BaseAdapter {
LayoutInflater inflater = null;
Activity activity;
ArrayList<News> newslist;
private PopupWindow popupWindow;
public MyAdapter(Activity activity, ArrayList<News> newslist) {
this.activity = activity;
this.newslist = newslist;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
initPopWindow();
}
@Override
public int getCount() {
return newslist != null ? newslist.size() : 0;
}
@Override
public News getItem(int position) {
if (newslist != null && newslist.size() != 0) {
return newslist.get(position);
}
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder;
if (vi == null) {
vi = inflater.inflate(R.layout.listview_item, null);
holder = new ViewHolder();
holder.item_title = (TextView) vi.findViewById(R.id.item_title);
holder.item_content = (TextView) vi.findViewById(R.id.item_content);
holder.button_showpop = (ImageView) vi.findViewById(R.id.button_showpop);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
News news = getItem(position);
holder.item_title.setText(news.getTitle());
holder.item_content.setText(news.getContent());
holder.button_showpop .setOnClickListener(new popAction(position));
return vi;
}
public class ViewHolder {
TextView item_title;
TextView item_content;
ImageView button_showpop;
}
/**
* 初始化popWindow
* */
private void initPopWindow() {
View popView = inflater.inflate(R.layout.listview_pop, null);
popupWindow = new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new ColorDrawable(0));
//设置popwindow出现和消失动画
popupWindow.setAnimationStyle(R.style.PopMenuAnimation);
btn_pop_close = (ImageView) popView.findViewById(R.id.btn_pop_close);
}
/** popWindow 关闭按钮 */
private ImageView btn_pop_close;
/**
* 显示popWindow
* */
public void showPop(View parent, int x, int y,int postion) {
//设置popwindow显示位置
popupWindow.showAtLocation(parent, 0, x, y);
//获取popwindow焦点
popupWindow.setFocusable(true);
//设置popwindow如果点击外面区域,便关闭。
popupWindow.setOutsideTouchable(true);
popupWindow.update();
if (popupWindow.isShowing()) {
}
btn_pop_close.setOnClickListener(new OnClickListener() {
public void onClick(View paramView) {
popupWindow.dismiss();
}
});
}
/**
* 每个ITEM中more按钮对应的点击动作
* */
public class popAction implements OnClickListener{
int position;
public popAction(int position){
this.position = position;
}
@Override
public void onClick(View v) {
int[] arrayOfInt = new int[2];
//获取点击按钮的坐标
v.getLocationOnScreen(arrayOfInt);
int x = arrayOfInt[0];
int y = arrayOfInt[1];
showPop(v, x , y, position);
}
}
}
就这么多的内容,很简单,日后碰到这类相关的效果,也就不用怕了。
下面是我经过上述代码实现的效果:
![](http://img.my.csdn.net/uploads/201404/16/1397651611_1074.gif)
下面放上该效果源码DEMO的下载地址:下载地址
高仿今日头条(二)预计明天发布,大致已经是个整体客户端了,有的功能还没实现还在进一步完善,比如说新闻类别选择那
这一系列博文都是:(android高仿系列)今日头条
--新闻阅读器 (一)
开发中碰到问题之后实现的,觉得可能有的开发者用的到或则希望独立成一个小功能DEMO,所以就放出来这么一个DEMO。
原本觉得是最后完成后发网站客户端的,可是这样体现不出一个功能一个功能的分析实现效果,而且周期时间长,所以就完成一部分,发一部分,敬请谅解。
下面的菜单弹出效果在很多的新闻阅读器上都有,比如今日头条、360新闻等。下
![](http://img.my.csdn.net/uploads/201404/16/1397651185_4296.gif)
其实这个实现起来很简单,看其效果,其实就是一个PopupWindow,之后设定相应postion的按钮点击属性,之后获取按钮的位置,给它设置动画显示消失就可以出现了。
下面看看代码的思路:
由于整体是一个LISTVIEW,所以我把点击的事件写到了对应的Adapter适配器中。
[java] view
plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
public class MyAdapter extends BaseAdapter {
LayoutInflater inflater = null;
Activity activity;
ArrayList<News> newslist;
private PopupWindow popupWindow;
public MyAdapter(Activity activity, ArrayList<News> newslist) {
this.activity = activity;
this.newslist = newslist;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
initPopWindow();
}
@Override
public int getCount() {
return newslist != null ? newslist.size() : 0;
}
@Override
public News getItem(int position) {
if (newslist != null && newslist.size() != 0) {
return newslist.get(position);
}
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder;
if (vi == null) {
vi = inflater.inflate(R.layout.listview_item, null);
holder = new ViewHolder();
holder.item_title = (TextView) vi.findViewById(R.id.item_title);
holder.item_content = (TextView) vi.findViewById(R.id.item_content);
holder.button_showpop = (ImageView) vi.findViewById(R.id.button_showpop);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
News news = getItem(position);
holder.item_title.setText(news.getTitle());
holder.item_content.setText(news.getContent());
holder.button_showpop .setOnClickListener(new popAction(position));
return vi;
}
public class ViewHolder {
TextView item_title;
TextView item_content;
ImageView button_showpop;
}
/**
* 初始化popWindow
* */
private void initPopWindow() {
View popView = inflater.inflate(R.layout.listview_pop, null);
popupWindow = new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new ColorDrawable(0));
//设置popwindow出现和消失动画
popupWindow.setAnimationStyle(R.style.PopMenuAnimation);
btn_pop_close = (ImageView) popView.findViewById(R.id.btn_pop_close);
}
/** popWindow 关闭按钮 */
private ImageView btn_pop_close;
/**
* 显示popWindow
* */
public void showPop(View parent, int x, int y,int postion) {
//设置popwindow显示位置
popupWindow.showAtLocation(parent, 0, x, y);
//获取popwindow焦点
popupWindow.setFocusable(true);
//设置popwindow如果点击外面区域,便关闭。
popupWindow.setOutsideTouchable(true);
popupWindow.update();
if (popupWindow.isShowing()) {
}
btn_pop_close.setOnClickListener(new OnClickListener() {
public void onClick(View paramView) {
popupWindow.dismiss();
}
});
}
/**
* 每个ITEM中more按钮对应的点击动作
* */
public class popAction implements OnClickListener{
int position;
public popAction(int position){
this.position = position;
}
@Override
public void onClick(View v) {
int[] arrayOfInt = new int[2];
//获取点击按钮的坐标
v.getLocationOnScreen(arrayOfInt);
int x = arrayOfInt[0];
int y = arrayOfInt[1];
showPop(v, x , y, position);
}
}
}
就这么多的内容,很简单,日后碰到这类相关的效果,也就不用怕了。
下面是我经过上述代码实现的效果:
![](http://img.my.csdn.net/uploads/201404/16/1397651611_1074.gif)
下面放上该效果源码DEMO的下载地址:下载地址
高仿今日头条(二)预计明天发布,大致已经是个整体客户端了,有的功能还没实现还在进一步完善,比如说新闻类别选择那
相关文章推荐
- android仿新闻阅读器菜单弹出效果实例(附源码DEMO下载)
- Android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
- android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
- android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
- android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
- android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
- Android编程实现仿优酷旋转菜单效果(附demo源码)
- Android编程实现仿易信精美弹出框效果【附demo源码下载】
- Android编程实现仿QQ发表说说,上传照片及弹出框效果【附demo源码下载】
- 点击弹出动态菜单效果ios源码
- Android基础之响应Menu键弹出菜单Demo
- Android编程滑动效果之倒影效果实现方法(附demo源码下载)
- Android_自定义水波纹菜单弹出效果
- Android实现类似于PC中的右键弹出菜单效果
- 时尚好用的---窗帘效果 和 点击弹出登录界面的效果 (Scroller类的应用) 附 2个DEMO及源码
- Android仿微博菜单弹出效果
- Android TreeView效果实现方法(附demo源码下载)
- Android 高仿微信(QQ)滑动弹出编辑、删除菜单效果,增加下拉刷新功能
- android自定义popupwindow仿微信右上角弹出菜单效果
- Android 毛玻璃效果弹出菜单动画