2017-02-07 13:21:41 Android_Cll 阅读数 14179
  • Android组件难点精讲

    Android组件开发视频培训教程,Android开发者可以使用Android组件来实现一些特定的功能,比如,可以通过组件来实现进度条功能、选项卡功能等,同样,也可以使用组件来实现拖动条或者星级评分条等功能。实战讲解图片切换器、GridView网格视图、Gallery画廊视图等高级组件的使用技巧。

    4183 人正在学习 去看看 CSDN讲师

-----------------转载请注明出处:http://blog.csdn.net/android_cll

一:效果图、






二:实现步骤:
1.xml布局的实现、

<ScrollView
    android:id="@+id/mymyscrollview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@+id/rejcdosjflk"
    android:background="#ffffff"
    android:scrollbars="none">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="60dp"
        android:orientation="vertical">
        </LinearLayout>
    </ScrollView>


2.activity的实现、
private ScrollView mScrollView;
mScrollView = (ScrollView) findViewById(R.id.mymyscrollview);
//调用方法
mScrollView.setOnTouchListener(new TouchListenerImpl());


private int scrollY;
private int height;
private int scrollViewMeasuredHeight;


private class TouchListenerImpl implements View.OnTouchListener {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN:


                break;
            case MotionEvent.ACTION_MOVE:
                scrollY = view.getScrollY();
                height = view.getHeight();
                scrollViewMeasuredHeight = mScrollView.getChildAt(0)
                        .getMeasuredHeight();
                break;
            case MotionEvent.ACTION_UP:
                System.out.println("scrollY=" + scrollY);
                System.out.println("height=" + height);
                System.out.println("scrollViewMeasuredHeight="
                        + scrollViewMeasuredHeight);
                if (scrollY == 0) {
                    System.out.println("滑动到了顶端 view.getScrollY()=" + scrollY);
                } else if ((scrollY + height) >= scrollViewMeasuredHeight) {
                    Message msg = new Message();
                    msg.what = 0;
                    mHandlerht.sendMessage(msg);
                } else {
                    System.out.println("滑动 height=" + height);
                }
                // 复位
                scrollY = 0;
                height = 0;
                scrollViewMeasuredHeight = 0;
                break;


            default:
                break;
        }
        return false;
    }


}


private Handler mHandlerht = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case 0:
                // 跳转
                Intent intentcll = new Intent();
                intentcll.setClass(BDDetialActivityCll.this,
                        CSProductDetailsCll.class);
                intentcll.putExtra("product", ncspbean);
                startActivity(intentcll);
                break;
            default:
                break;
        }
    }


};




有用的看一下,很简单。。。。。。。。。



























2015-04-01 14:22:36 chunho 阅读数 2998
  • Android组件难点精讲

    Android组件开发视频培训教程,Android开发者可以使用Android组件来实现一些特定的功能,比如,可以通过组件来实现进度条功能、选项卡功能等,同样,也可以使用组件来实现拖动条或者星级评分条等功能。实战讲解图片切换器、GridView网格视图、Gallery画廊视图等高级组件的使用技巧。

    4183 人正在学习 去看看 CSDN讲师

Android ListView 去除边缘阴影、选中色、拖动、底部上拉、顶部下拉背景色等


以下是通过XML定义的方式实现,如果需要通过代码实现,找到对应是set方式设置即可。


去除下滑到底部,上拉时出现的蓝色区域
android:overScrollMode="never"


去除ListView滑到顶部和底部时边缘的黑色阴影:
android:fadingEdge="none"
 


去除拖动时默认的黑色背景:
android:cacheColorHint="#00000000"
 


去除选中时的黄色底色:
android:listSelector="#00000000"
 


去除行与行之间的黑线:  
list.setDivider(null);
 


ListView刷新后自动滚到最底部:
list.setSelection(msgList.getAdapter().getCount()-1);

2015-11-29 12:55:05 zhangphil 阅读数 2933
  • Android组件难点精讲

    Android组件开发视频培训教程,Android开发者可以使用Android组件来实现一些特定的功能,比如,可以通过组件来实现进度条功能、选项卡功能等,同样,也可以使用组件来实现拖动条或者星级评分条等功能。实战讲解图片切换器、GridView网格视图、Gallery画廊视图等高级组件的使用技巧。

    4183 人正在学习 去看看 CSDN讲师


Android Magnet:桌面删除APP自动弹出垃圾桶接受图标删除动作

在Android系统上,当用户长按桌面的图标后,会自动从底部或者顶部弹出一个垃圾或者叉子的删除图标,用户拖曳欲删除的图标至垃圾箱后,则在桌面删除该APP。
在github上一个第三方开源的项目:Magnet实现的就是上述类似功能。如图(图片来源自Magnet项目包)所示:


Magnet在github上的项目主页是:https://github.com/premnirmal/Magnet
Magnet实现相对简单,开发文档和代码例子比较易懂。Magnet给出的demo代码例子是由一个主Activity启动一个Service,主Activity启动后就finsh自己,然后由Service接管用户的拖曳删除动作。


启动Service的MainActivity:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;


public class ParanormalActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startService(new Intent(this,MyService.class));
        finish();
    }
}


关键的代码章节(Service):

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

import com.premnirmal.Magnet.IconCallback;
import com.premnirmal.Magnet.Magnet;


public class MyService extends Service implements IconCallback {

    private static final String TAG = "Magnet";
    private Magnet mMagnet;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        ImageView iconView = new ImageView(this);
        iconView.setImageResource(R.drawable.ic_launcher);
        mMagnet = new Magnet.Builder(this)
                .setIconView(iconView)
                .setIconCallback(this)
                .setRemoveIconResId(R.drawable.trash)
                .setRemoveIconShadow(R.drawable.bottom_shadow)
                .setShouldFlingAway(true)
                .setShouldStickToWall(true)
                .setRemoveIconShouldBeResponsive(true)
                .build();
        mMagnet.show();
    }


    @Override
    public void onFlingAway() {
        Log.i(TAG, "onFlingAway");
    }

    @Override
    public void onMove(float x, float y) {
        Log.i(TAG, "onMove(" + x + "," + y + ")");
    }

    @Override
    public void onIconClick(View icon, float iconXPose, float iconYPose) {
        Log.i(TAG, "onIconClick(..)");
        mMagnet.destroy();
    }

    @Override
    public void onIconDestroyed() {
        Log.i(TAG, "onIconDestroyed()");
    }
}


相关权限需要添加:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>


2016-12-04 21:47:15 tangletao 阅读数 1853
  • Android组件难点精讲

    Android组件开发视频培训教程,Android开发者可以使用Android组件来实现一些特定的功能,比如,可以通过组件来实现进度条功能、选项卡功能等,同样,也可以使用组件来实现拖动条或者星级评分条等功能。实战讲解图片切换器、GridView网格视图、Gallery画廊视图等高级组件的使用技巧。

    4183 人正在学习 去看看 CSDN讲师

效果图如下:
这里写图片描述

①实现原理:

Android自带的ScrollView滑动到顶部和底部后,就不能继续拖动了,因此要实现IOS的拉动弹性效果,可以自定义一个布局,继承ScrollView。

  1. 在最顶部时,可以向下拉动,并且弹回。
  2. 在最底部时,可以向上拉动,并且弹回。
  3. 不在最底部和最顶部时,就是默认的ScrollView的滑动效果。

如何判断ScrollView处于最顶部和最底部呢?

// 最顶部时,ScrollView的纵向滑动坐标值为0
getScrollY() == 0
// 最底部时,(ScrollView的子布局的高度 <= ScrollView纵向滑动坐标值 + ScrollView的高度)
contentView.getMeasuredHeight() <= getScrollY() + getHeight()

②具体代码如下:

/**
 * 仿IOS上拉下拉弹性效果ScrollView
 * @author yangmbin
 * created at 2016/12/4 16:48
 */
public class IOSScrollView extends ScrollView {

    // 上下文
    private Context context;

    // ScrollView子布局
    private View contentView;

    // 手势按下Y坐标
    private float startY;

    // 手势按下时,是否可以下拉/上拉标志
    private boolean isCanPullDown, isCanPullUp;

    // 保存ScrollView子布局的初始位置信息
    private int leftPosition, topPosition, rightPosition, bottomPosition;

    public IOSScrollView(Context context) {
        super(context);
        this.context = context;
    }

    public IOSScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    /**
     * 获取ScrollView的子布局
     */
    @Override
    protected void onFinishInflate() {
        if (getChildCount() > 0) {
            contentView = getChildAt(0);
        }
    }

    /**
     * 获取初始子布局的位置信息
     */
    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        if (contentView != null) {
            leftPosition = contentView.getLeft();
            topPosition = contentView.getTop();
            rightPosition = contentView.getRight();
            bottomPosition = contentView.getBottom();
        }
    }

    /**
     * 判断是否在ScrollView顶部,在顶部时可以下拉
     */
    private boolean isScrollViewTop() {
        if (getScrollY() == 0)
            return true;
        return false;
    }

    /**
     * 判断是否在ScrollView底部,在顶部时可以上拉
     */
    private boolean isScrollViewBottom() {
        if (contentView.getMeasuredHeight() <= getScrollY() + getHeight())
            return true;
        return false;
    }

    /**
     * 触摸事件处理
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (contentView == null)
            return super.dispatchTouchEvent(ev);

        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startY = ev.getY();
                isCanPullDown = isScrollViewTop();
                isCanPullUp = isScrollViewBottom();
                break;

            case MotionEvent.ACTION_UP:
                float endY = ev.getY();
                // 手势放开时,采用动画形式返回原位置
                if (endY > startY && isCanPullDown || endY < startY && isCanPullUp) {
                    ObjectAnimator animator = ObjectAnimator.ofFloat(contentView, "translationY", contentView.getTop(), topPosition);
                    animator.setDuration(500);
                    animator.setInterpolator(new AccelerateInterpolator());
                    animator.start();

                    // 设置布局到正常位置
                    contentView.layout(leftPosition, topPosition, rightPosition, bottomPosition);
                }
                break;

            case MotionEvent.ACTION_MOVE:
                // 如果不在ScrollView的最顶部或最底部(startY需要是在最顶部或最底部时按下的坐标)
                if (!isCanPullUp && !isCanPullDown) {
                    startY = ev.getY();
                    isCanPullDown = isScrollViewTop();
                    isCanPullUp = isScrollViewBottom();
                    break;
                }

                // 在最上部或最底部时,拉动移动布局
                // 1、下拉 2、上拉 3、布局内容比ScrollView小,则既可以上拉,也可以下拉
                if (isCanPullDown && ev.getY() > startY || isCanPullUp && ev.getY() < startY || isCanPullDown && isCanPullUp) {
                    int deltaY = (int) (ev.getY() - startY);
                    contentView.layout(leftPosition, topPosition + deltaY, rightPosition, bottomPosition + deltaY);
                }

                break;
        }

        return super.dispatchTouchEvent(ev);
    }
}

XML中的使用方法:

<?xml version="1.0" encoding="utf-8"?>
<com.demo.IOSScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.demo.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="300dp"
            android:text="111111111"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="300dp"
            android:text="222222222"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="300dp"
            android:text="333333333"/>
    </LinearLayout>

</com.demo.IOSScrollView>

参考:http://blog.csdn.net/u014733374/article/details/42739345

2016-06-30 18:08:39 u010696783 阅读数 580
  • Android组件难点精讲

    Android组件开发视频培训教程,Android开发者可以使用Android组件来实现一些特定的功能,比如,可以通过组件来实现进度条功能、选项卡功能等,同样,也可以使用组件来实现拖动条或者星级评分条等功能。实战讲解图片切换器、GridView网格视图、Gallery画廊视图等高级组件的使用技巧。

    4183 人正在学习 去看看 CSDN讲师

分享一个Android应用主体框架,供大家学习,主要实现功能:

      使用ViewPage实现首次进入动画效果

      Toolbar实现导航栏

      DrawLayout可拖动显示

      FragmentTabHost和ViewPage实现底部菜单

运行效果如下,图片为任意图片,主要是整体框架:(Demo下载地址在底部)

        进入动画效果

  

 主页框架: FragmentTabHost+ViewPage+ Toolbar

  

   DrawLayout


Demo下载地址点击打开链接

没有更多推荐了,返回首页