正常使用ScrollView控件的一些api详解。

package com.example.lenovo.mydemoapp.scrollViewDemo;

import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView; import com.example.lenovo.mydemoapp.GuidePage;
import com.example.lenovo.mydemoapp.R; public class MyScrollViewDemo extends AppCompatActivity {
private final String TAG = "MyScrollViewDemo";
private ScrollView mScrollView;
private LinearLayout ll; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_scroll_view_demo);
mScrollView = (ScrollView)findViewById(R.id.ScrollView);
// View view1 = mScrollView.getChildAt(0);
// FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams)view1.getLayoutParams();
// Log.e(TAG, "Child is weght:" +lp.width);
//布局参数是 根据当前布局的父类布局,
// 例如当前的ScrollView的父类布局实际上是LinearLayout所以写成: LinearLayout.LayoutParams
//另外布局参数的参数其实是高度和宽度的大小
LinearLayout.LayoutParams mSlp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
//设置高度和宽度
mSlp.width = 300;
mSlp.height = 500;
//设置居中
mSlp.gravity = Gravity.CENTER_HORIZONTAL;
//显示水平滚动条
//mScrollView.setHorizontalScrollBarEnabled(false);
//显示垂直滚动条
mScrollView.setVerticalScrollBarEnabled(false);
//配置布局参数
mScrollView.setLayoutParams(mSlp);
//滚动条大小
//mScrollView.setScrollBarSize(10);
//滚动条音效
//mScrollView.setSoundEffectsEnabled(false);
//滚动条样式
//mScrollView.setScrollBarStyle();
//在淡入淡出前设置滚动条默认延迟
//mScrollView.setScrollBarDefaultDelayBeforeFade();
//水平淡入淡入效果
//mScrollView.setHorizontalFadingEdgeEnabled();
//垂直淡入淡入效果
mScrollView.setVerticalFadingEdgeEnabled(true);
//淡入淡出边缘长度
mScrollView.setFadingEdgeLength(100);
//允许ScrollView的子控件填满ScrollView控件
mScrollView.setFillViewport(true);
//箭头按键是否可以执行滚动
//mScrollView.setSmoothScrollingEnabled(false);
ll = (LinearLayout)findViewById(R.id.ScrollView_layout);
//因为ScrollView 布局实际上是继承FrameLayout 布局的 所以布局参数也是设置为FrameLayout
FrameLayout.LayoutParams mLp = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
mLp.gravity = Gravity.CENTER_HORIZONTAL;//设置横向居中
//设置高度和宽度
mLp.width = 200;
mLp.height = 500;
ll.setLayoutParams(mLp);
//设置外边距
mLp.setMargins(10,50,10,0);
//设置内边距
ll.setPadding(10,10,10,10);
int i=0;
do{
TextView textView = new TextView(this);
textView.setTextSize(40f);
textView.setGravity(Gravity.CENTER);
if(i==0) {
textView.setText(" ");
}else if(i==21){
textView.setText(" ");
}else {
textView.setText("" + i);
}
i++;
Log.e(TAG, "i="+i );
ll.addView(textView); }while (i<22); mScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
/*
ACTION_MOVE 移动
ACTION_MASK 隐藏
ACTION_DOWN 按下
ACTION_UP 按起
ACTION_CANCEL 取消
ACTION_OUTSIDE 外面
ACTION_POINTER_DOWN 指向下
ACTION_POINTER_UP 指向上
ACTION_HOVER_MOVE 来回移动
ACTION_SCROLL 滚动
ACTION_HOVER_ENTER 来回输入
ACTION_HOVER_EXIT 来回输出
ACTION_BUTTON_PRESS 按钮按下
ACTION_BUTTON_RELEASE 按键释放
ACTION_POINTER_INDEX_MASK 指针数值隐藏
ACTION_POINTER_INDEX_SHIFT 指针数值变化
*/
switch (event.getAction()){
case MotionEvent.ACTION_MOVE:
Log.e(TAG, "开始滚动");
Log.e(TAG, "当前getScaleY:"+mScrollView.getScaleY());
Log.e(TAG, "当前getPivotY:"+mScrollView.getPivotY());
break;
case MotionEvent.ACTION_MASK:
Log.e(TAG, "停止滚动");
Log.e(TAG, "当前getPivotY:"+mScrollView.getPivotY());
break;
default:
break; } return false;
}
}); }
}

效果图:

自定义重写ScrollView的class,里面将onScrollChanged的坐标数据回调出去

package com.example.lenovo.mydemo.myScrollViewDemo;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView; /**
* Created by lenovo on 2018/6/26.
*/ public class MyScrollView extends ScrollView {
public MyScrollView(Context context) {
super(context);
} public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
} public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} @Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if(this.onScrollChangedListener != null){
onScrollChangedListener.onScrollChanged(t,oldt); }
}
private OnScrollChangedListener onScrollChangedListener;
public void setOnScrollChangedListener(OnScrollChangedListener onScrollChangedListener){
this.onScrollChangedListener = onScrollChangedListener; }
public abstract interface OnScrollChangedListener{
public abstract void onScrollChanged (int t,int oldt); }
}
 

使用这个重写的ScrollView

package com.example.lenovo.mydemo.myScrollViewDemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log; import com.example.lenovo.mydemo.R; public class MyScroll extends AppCompatActivity {
private String TAG = "MyScroll";
private MyScrollView myScrollView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_scroll);
myScrollView = (MyScrollView)findViewById(R.id.scroll_1);
myScrollView.setOnScrollChangedListener(new MyScrollView.OnScrollChangedListener() {
@Override
public void onScrollChanged(int t, int oldt) {
Log.e(TAG, "控件布局高度:"+myScrollView.getHandler());
//getMeasuredHeight 和 getHandler 不能在onCreate 重写方法中使用,否则会返回0或者null
Log.e(TAG, "控件布局实际高度:"+myScrollView.getChildAt(0).getMeasuredHeight());
Log.e(TAG, "new Y = "+t);
Log.e(TAG, "old Y = "+oldt );
}
}); }
}

效果图:

效果图2:

接口回调例子2:

//注意 接口了按键监听
public class ChildListAdapter extends RecyclerView.Adapter<ChildListAdapter.ViewHolder> implements View.OnClickListener{
private final String TAG = "HomePageRecyclerAdapter";
private List<ChildListData> mList;
private Context mContext;
public ChildListAdapter(Context context, List<ChildListData> list){
this.mContext = context;
this.mList = list;
} @Override
public ChildListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_child_list,parent,false);
ViewHolder viewHolder = new ViewHolder(view);
view.setOnClickListener(this);//添加按键监听
return viewHolder;
} @Override
public void onBindViewHolder(ChildListAdapter.ViewHolder holder, int position) {
ChildListData childListData = mList.get(position);
//传入整组数据
holder.itemView.setTag(childListData);
holder.name.setText(childListData.getName());
Bitmap bt = BitmapFactory.decodeFile(childListData.getFilePath());
if(bt != null){
Drawable drawable = new BitmapDrawable(mContext.getResources(),bt);
holder.imageView.setImageDrawable(drawable);
}else {
Log.e(TAG, "没有获取到头像,使用默认头像");
holder.imageView.setImageResource(R.mipmap.default_avatar);
} } @Override
public int getItemCount() {
return mList.size();
} @Override
public void onClick(View v) {
if(mOnItemClickListener != null){
mOnItemClickListener.onItemClick(v, (ChildListData)v.getTag());//回调数据
}
} public class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView name;
public ViewHolder(View itemView) {
super(itemView);
imageView = (ImageView)itemView.findViewById(R.id.HomePage_row_image);
name = (TextView)itemView.findViewById(R.id.HomePage_row_name);
}
}
public static interface OnRecyclerViewItemClickListener{
void onItemClick(View view, ChildListData childListData);
} private OnRecyclerViewItemClickListener mOnItemClickListener = null; public void setOnItemClickListener(OnRecyclerViewItemClickListener listener){
this.mOnItemClickListener = listener; }
}

android 开发 ScrollView 控件的一些api描述与自定义ScrollView接口回调方法的更多相关文章

  1. CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建

    Android开发使用控件入门--环境搭建 2014-12-24 09:57     14人阅读     评论(0)     收藏         编辑     删除 CAD控件.CAD三维控件,手机 ...

  2. Android开发使用控件入门--环境搭建

    Android开发使用控件入门--环境搭建 软件名称(,梦,,想.CAD  ,控件) 1. 环境搭建: 3 1.1. 安装Eclipse 3 1.2. 下载JDK 3 1.3. 下载Android S ...

  3. 【Android开发】控件外边框自定义

    1.在drawable里面新建自定义的资源文件shape <?xml version="1.0" encoding="utf-8"?> <sh ...

  4. Android开发ImageView控件缩放图片

    首先还是最基础的ImageView控件如何显示图片: <ImageView                Android:id="@+id/imgView"          ...

  5. Android开发CheckBox控件,全选,反选,取消全选

    在Android开发中我们经常会使用CheckBox控件,那么怎么实现CheckBox控件的全选,反选呢 首先布局我们的界面: <?xml version="1.0" enc ...

  6. android 开发-设置控件/view的水平方向翻转

    设置控件沿着水平方向翻转(即Y轴180°) 看效果: 代码: <pl.droidsonroids.gif.GifImageView android:id="@+id/gv_image1 ...

  7. 从零开始学android开发-获取控件

    mBtnNews = (Button)findViewById(R.id.btn_news);//获取控件

  8. android 开发-Toast控件的实现

    Toast吐司: Toast内容简单,不做过多介绍,Toast支持自带简单吐司,自定义吐司.内容简单可见代码,详见API.A toast provides simple feedback about ...

  9. Android 开发添加控件事件的三种方式

    import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view ...

随机推荐

  1. docker-compose docker启动工具,容器互联

    简介: docker可以一条命令就运行一个配置好的服务器,很是方便. 但是也有一个问题就是,当参数比较多,映射目录比较多,映射端口比较多………… 我以前就是写个脚本,用脚本来启动,很low啊. 也见到 ...

  2. JavaScript 设计模式的七大原则(未完成)

    设计模式(面向对象)有七大设计原则,分别是: 开闭原则:对扩展开放,对修改关闭 单一职责原则:每一个类应该专注于做一件事情 里氏替换原则:父类存在的地方,子类是可以替换的 依赖倒转原则:实现尽量依赖抽 ...

  3. 【转载】Spring Cloud全家桶主要组件及简要介绍

    https://blog.csdn.net/xlgen157387/article/details/77773908

  4. 基于Verilog的简单FIFO读写实验

    一.模块框图及基本思路 fifo_ip:ISE生成的IP fifo_control:在fifo未满情况下不断写入递增的四位数,每隔1s读出一个数据驱动Led显示 fifo_top:前两个模块的组合 二 ...

  5. Idea Tomcat Servlet路径配置问题

    虚拟路径问题没有搞清楚,折腾了好久. 总的来说:login.html(action)和loginServlet(@webServlet)的虚拟路径相差一个/day14.同时二者在浏览器的访问时,都必须 ...

  6. IC卡插入与触点激活时序

    当IC卡插入接口设备时,终端应确保其所有触点处于低电平状态: 当IC卡插入接口设备后,触点须按如下方式激活: 要点: 终端必须在整个激活时序中保持RST为低电平状态: 触点物理接触之后,应在IO或CL ...

  7. MacBook使用笔记2 - 安装windows虚拟机攻略

    转载请标注原链接:http://www.cnblogs.com/xczyd/p/5498878.html 5月初从阿里滚粗,然后失去了公司发的Mac Air.说实话Mac机器确实比windows好用一 ...

  8. C#语言与变量、数据类型

    一.计算机语言 1.计算机语言包括:C\PHP\Ruby\JAVA\C#\Basi\JS\C++ 2.计算机语言发展史:机器语言——汇编语言——高级语言 二.代码 1.程序始终:Code(编码).Co ...

  9. 《DSP using MATLAB》Problem 7.10

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  10. kali 2018.2版本运行破解版burpsuite时候的问题。

    最近重装了kali虚拟机,装完之后把burp拷到里面发现运行不了了,折腾了下才解决,问题主要是由于java环境造成的. 系统默认是以java10运行burp的,但是java10好像是不支持    -X ...