編輯:關於Android編程
感覺用到的次數無比多,要是要把它記下來,免得要用的時候又要重來一遍(個人記性太差)
先看效果圖
接下來,說說要怎麼寫
1.首先在.gradle中添加一個jar包
gradle-wrapper.jar
2.在build.gradle添加依賴
compile ‘com.sch.rfview:AnimRefreshRecyclerView:1.0.6@aar’
compile ‘com.android.support:recyclerview-v7:24.0.0’
(recyclerview如果沒有,要自己去下載的,這裡我用的是24.0.0)
3.核心代碼
Activity:
package com.example.administrator.sa.ListviewShangXia; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import com.example.administrator.sa.R; /** * listview的上下拉刷新,ok了 */ public class ShangXiaActivity extends AppCompatActivity { private LinearFragment linearFragment; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shang_xia); linearFragment=new LinearFragment(); getFragmentManager().beginTransaction().replace(R.id.fragment_container,linearFragment).commit(); button= (Button) findViewById(R.id.list_shangxia); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getFragmentManager().beginTransaction().setCustomAnimations(R.anim.translate_right_in, R.anim.translate_left_out).replace(R.id.fragment_container, linearFragment).commit(); } }); } }
R.layout.activity_shang_xia
類LinearFragment
package com.example.administrator.sa.ListviewShangXia; import android.app.Fragment; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.administrator.sa.R; import com.example.administrator.sa.ShangXiaShuaXin.DimensionConvert; import com.sch.rfview.AnimRFRecyclerView; import com.sch.rfview.decoration.DividerItemDecoration; import com.sch.rfview.manager.AnimRFLinearLayoutManager; import java.util.ArrayList; import java.util.List; /** * */ public class LinearFragment extends Fragment { private AnimRFRecyclerView mRecyclerView; private View headerView; private View footerView; private Listdatas; private Handler mHandler = new Handler(); public LinearFragment() { // addData(); datas = new ArrayList<>(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (mRecyclerView == null) { // 自定義的RecyclerView, 也可以在布局文件中正常使用 mRecyclerView = new AnimRFRecyclerView(getActivity()); // 頭部 headerView = LayoutInflater.from(getActivity()).inflate(R.layout.header_view, null); // 腳部 footerView = LayoutInflater.from(getActivity()).inflate(R.layout.footer_view, null); // 使用重寫後的線性布局管理器 AnimRFLinearLayoutManager manager = new AnimRFLinearLayoutManager(getActivity()); mRecyclerView.setLayoutManager(manager); mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), manager.getOrientation(), true)); // // 添加頭部和腳部,如果不添加就使用默認的頭部和腳部 // mRecyclerView.addHeaderView(headerView); // // 設置頭部的最大拉伸倍率,默認1.5f,必須寫在setHeaderImage()之前 // mRecyclerView.setScaleRatio(1.7f); // // 設置下拉時拉伸的圖片,不設置就使用默認的 // mRecyclerView.setHeaderImage((ImageView) headerView.findViewById(R.id.iv_hander)); // mRecyclerView.addFootView(footerView); // 設置刷新動畫的顏色 mRecyclerView.setColor(Color.RED, Color.BLUE); // 設置頭部恢復動畫的執行時間,默認500毫秒 mRecyclerView.setHeaderImageDurationMillis(300); // 設置拉伸到最高時頭部的透明度,默認0.5f mRecyclerView.setHeaderImageMinAlpha(0.6f); // 設置適配器 mRecyclerView.setAdapter(new MyAdapter()); // 設置刷新和加載更多數據的監聽,分別在onRefresh()和onLoadMore()方法中執行刷新和加載更多操作 mRecyclerView.setLoadDataListener(new AnimRFRecyclerView.LoadDataListener() { @Override public void onRefresh() { new Thread(new MyRunnable(true)).start(); } @Override public void onLoadMore() { new Thread(new MyRunnable(false)).start(); } }); // 刷新 mRecyclerView.setRefresh(true); } return mRecyclerView; } class MyRunnable implements Runnable { boolean isRefresh; public MyRunnable(boolean isRefresh) { this.isRefresh = isRefresh; } @Override public void run() { mHandler.postDelayed(new Runnable() { @Override public void run() { if (isRefresh) { newData(); refreshComplate(); // 刷新完成後調用,必須在UI線程中 mRecyclerView.refreshComplate(); } else { addData(); loadMoreComplate(); // 加載更多完成後調用,必須在UI線程中 mRecyclerView.loadMoreComplate(); } } }, 2000); } } public void refreshComplate() { mRecyclerView.getAdapter().notifyDataSetChanged(); } public void loadMoreComplate() { mRecyclerView.getAdapter().notifyDataSetChanged(); } /** * 添加數據 */ private void addData() { for (int i = 0; i < 13; i++) { datas.add("條目 " + (datas.size() + 1)); } } public void newData() { datas.clear(); for (int i = 0; i < 13; i++) { datas.add("刷新後條目 " + (datas.size() + 1)); } } private class MyAdapter extends RecyclerView.Adapter { @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { TextView view = new TextView(getActivity()); view.setGravity(Gravity.CENTER); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, DimensionConvert.dip2px(getActivity(), 50))); MyViewHolder mViewHolder = new MyViewHolder(view); return mViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, final int position) { holder.mTextView.setText(datas.get(position)); } @Override public int getItemCount() { return datas.size(); } } private class MyViewHolder extends RecyclerView.ViewHolder { TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView; } } }
類DimensionConvert
package com.example.administrator.sb.ListviewShangXiaShuaXin; import android.content.Context; /** * */ public class DimensionConvert { /** * 根據手機的分辨率從 dp 的單位 轉成為 px(像素) * * @param context * @param dpValue 要轉換的dp值 */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * 根據手機的分辨率從 px(像素) 的單位 轉成為 dp * * @param context * @param pxValue 要轉換的px值 */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } }
layout中布局:
footer_view.xml
header_view.xml
anim中的布局:
translate_left_out.xml
translate_right_in.xml
布局代碼:
footer_view.xml
header_view.xml:
translate_left_out.xml
translate_right_in.xml
寫完了
本文所要介紹的簡易天氣App主要用RxAndroid、MVP、Retrofit實現,首先來看看效果:主頁內容:右側欄天氣列表:左側欄城市列表首先看看Activity主要代
效果圖如下: package com.example.l3_sharedpreferences; import com.example.l3_sharedprefere
本節引言: 好的,上一節中,我們又寫了一個關於Xfermode圖片混排的例子——擦美女衣服的Demo,加上前面的 利用Xfermode
一、問題描述 使用BordercastReceiver和Service組件實現下述功能:1.當手機處於來電狀態,啟動監聽服務,對來電進行監聽錄音。2.設置電話黑名單,當