xUtils+自定义listview+绘图
来源:互联网 发布:黑客帝国矩阵革命 bt 编辑:程序博客网 时间:2024/05/23 14:03
!!!用xUitls的时候首先要把xUtils-3.3.22.jar这个jar包导到项目中,并依赖。
首先要使用这个框架
因为我这里用的是gson解析json字符串的所以还需要这一步
import android.app.Application;import org.xutils.x;public class App extends Application { @Override public void onCreate() { super.onCreate(); x.Ext.init(this); }}
创建一个类,并继承Application ,在onCreate方法中写入x.Ext.init(this);就可以了
MainActivity
import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { private EditText name,pass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); name= (EditText) findViewById(R.id.name); pass= (EditText) findViewById(R.id.pass); } public void Click(View view) { switch (view.getId()) { case R.id.dl: String s = name.getText().toString(); //判断集合里面是否存在用户名和密码 if((s.equals("admin"))){ Intent intent=new Intent(this,Main2Activity.class); startActivity(intent); //切换Activity的动画 overridePendingTransition(R.anim.alpha,R.anim.alpha); } break; case R.id.cz: name.setText(""); pass.setText("");//清空EditText break; } }}
MainActivity里面有一个登陆(没用数据库),和两个按钮,一个登陆(点击之后跳转),一个充值(点击之后自动清空EditText)
activity_main布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.zhouliu.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="50dp" android:hint="请输入账号" android:id="@+id/name" /> <EditText android:layout_width="match_parent" android:layout_height="50dp" android:hint="请输入密码" android:id="@+id/pass" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录" android:id="@+id/dl" android:onClick="Click" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="重置" android:id="@+id/cz" android:onClick="Click" /></LinearLayout>
Main2Activity
import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.AbsListView;import android.widget.ListView;import android.widget.RadioGroup;import com.google.gson.Gson;import org.xutils.common.Callback;import org.xutils.http.RequestParams;import org.xutils.x;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Main2Activity extends AppCompatActivity implements AbsListView.OnScrollListener{ private ListView lv; private String s="http://app.vmoiver.com/apiv3/post/getPostInCate?cateid=0&p="; int count=1; private List<Map<String,String>> list; boolean flag; MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); lv= (ListView) findViewById(R.id.lv); list=new ArrayList<>(); myAdapter= new MyAdapter(list, Main2Activity.this); lv.setAdapter(myAdapter); show(); lv.setOnScrollListener(this); } private void show() { RequestParams params=new RequestParams(s+count); x.http().get(params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String s) { Gson gson=new Gson(); User user = gson.fromJson(s, User.class); List<Map<String,String>> list1=new ArrayList<Map<String, String>>(); for (int i=0;i<user.getData().size();i++){ Map<String,String> map=new HashMap<String, String>(); map.put("title",user.getData().get(i).getTitle()); map.put("image",user.getData().get(i).getImage()); list1.add(map); } list.addAll(list1); myAdapter.notifyDataSetChanged(); } @Override public void onError(Throwable throwable, boolean b) { } @Override public void onCancelled(CancelledException e) { } @Override public void onFinished() { } }); } @Override public void onScrollStateChanged(AbsListView absListView, int i) { if(i==SCROLL_STATE_IDLE&&flag){ count++; show(); } } @Override public void onScroll(AbsListView absListView, int i, int i1, int i2) { if(i+i1==i2){ flag=true; } else { flag=false; } }}
activity_main2
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.zhouliu.Main2Activity"> <ListView android:layout_width="match_parent" android:id="@+id/lv" android:layout_height="match_parent"> </ListView></RelativeLayout>
自定义ListView的布局item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/iv" /> <TextView android:layout_width="wrap_content" android:layout_height="100dp" android:id="@+id/tv" android:text="我没过" /></LinearLayout>
自定义Listview的适配器
import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import org.xutils.image.ImageOptions;import org.xutils.x;import java.util.List;import java.util.Map;import it.sephiroth.android.library.picasso.Picasso;/** * Created by 爸爸 on 2017/11/4. */public class MyAdapter extends BaseAdapter { private List<Map<String,String>> list; private Context context; public MyAdapter(List<Map<String, String>> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { Holder holder=null; if(view==null){ holder=new Holder(); view= View.inflate(context,R.layout.item,null); holder.iv= (ImageView) view.findViewById(R.id.iv); holder.tv= (TextView) view.findViewById(R.id.tv); view.setTag(holder); } else { holder= (Holder) view.getTag(); } ImageOptions imageOptions=new ImageOptions.Builder().setRadius(500).build(); x.image().bind(holder.iv,list.get(i).get("image"),imageOptions); holder.tv.setText(list.get(i).get("title")); return view; } class Holder{ TextView tv; ImageView iv; }}
User这里是创建一个类,然后按Alt+s出来一个框把字符串扔上去就行了
XCRoundRectImageView这个是绘图代码
import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;/** * Created by 爸爸 on 2017/11/4. */public class XCRoundRectImageView extends ImageView { private Paint paint; public XCRoundRectImageView(Context context) { super(context); } public XCRoundRectImageView(Context context, AttributeSet attrs) { super(context, attrs); } public XCRoundRectImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); paint=new Paint(); } @Override protected void onDraw(Canvas canvas) { Drawable drawable=getDrawable(); if(null!=drawable){ Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); Bitmap b=getRoundBitmap(bitmap,20); final Rect rectSrc=new Rect(0,0,b.getWidth(),b.getHeight()); final Rect rectDest=new Rect(0,0,getWidth(),getHeight()); paint.reset(); canvas.drawBitmap(b,rectSrc,rectDest,paint); } else { super.onDraw(canvas); } } public Bitmap getRoundBitmap(Bitmap bitmap,int roundPx) { Bitmap output=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight() , Bitmap.Config.ARGB_8888 ); Canvas canvas=new Canvas(output); final int color=0xff424242; final Rect rect=new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()); final RectF rectf=new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0,0,0,0); paint.setColor(color); int x=bitmap.getWidth(); canvas.drawRoundRect(rectf,roundPx,roundPx,paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap,rect,rect,paint); return output; }}
对了,我还写了一个Activity切换动画,需要在res里面创建一个anim文件夹在这个文件夹里创建一个xml文件
anim
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="1" android:toAlpha="0.1" android:duration="3000" android:fillAfter="true" ></alpha>
到这里就结束了,希望能帮到大家
阅读全文
0 0
- xUtils+自定义listview+绘图
- 使用Xutils框架优化ListView
- 自定义绘图
- 自定义 ListView
- 自定义ListView
- 自定义listview
- 自定义LISTVIEW
- 自定义ListView
- 自定义listview
- 自定义listview
- 自定义ListView
- 自定义ListView
- 自定义listview
- 自定义listview
- 自定义listview
- ListView-自定义
- ListView自定义
- 自定义ListView
- 织梦cms内核vip解析包
- java设计模式 ——观察者模式
- OKHttp + RxJava请求数据
- Fragment的切换方法
- Git的基本使用
- xUtils+自定义listview+绘图
- 滑动fragment的两种方法
- bzoj 3372: [Usaco2004 Feb]Moo University -- Financial Aid 财政补助 二分
- centos7没有分配ip
- 欢迎使用CSDN-markdown编辑器
- Linux下pip安装教程
- Leetcode 486. Predict the Winner
- 线程的生命周期?
- 代码质量检测—阿里开发手册插件及IDEA自带检测功能