android gridview 滑动选择

gridview可否能做到像手势密码那样,滑动选择对应的子view呢。大侠们有demo或者链接来参考一下吗

2个回答

不清楚具体需求,你继承一个GridView加上下面的代码,看看效果,看完有没有思路

float x = -1;
float y = -1;
@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()){
        case MotionEvent.ACTION_DOWN:
            x = ev.getX();
            y = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            x = ev.getX();
            y = ev.getY();
            for (int i = 0; i < getChildCount(); i++) {
                Rect rect = new Rect();
                getChildAt(i).getHitRect(rect);
                if (rect. contains((int)x, (int)y)){
                    getChildAt(i).setBackgroundColor(Color.RED);
                }
            }
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:

            break;
    }
    return super.onTouchEvent(ev);
}
qq_16625307
qq_16625307 可以了,要得就是这种效果
接近 3 年之前 回复
qq_16625307
qq_16625307 就是类似手机相册中划动多选的效果,getChildAt()和getHitRect()可以看看吗
接近 3 年之前 回复

可以监听触摸坐标,判断是否在子view的选择范围内

qq_16625307
qq_16625307 有demo或者链接参考下吗
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android 类似GridView滑动分页
现在有一个这样的需求 , 我有三个页面,每个页面显示的是不同的app,这三页是可以滑动翻页的,并且长按App是可以进行交换位置的,相当于就是手机app长按拖拽交换item,这样的需求该怎么进行合理的利用呢,我之后每个app是还有点击事件的,谁有好的demo可以发我一份吗?网上的我都看了一下 存在着很多问题,急!急!!
android多个GridView拖拽滑动翻页
现在有一个这样的需求,有三个页面,可以滑动翻页的,在页面中的显示的是app并且有点击事件,在滑动拖拽时交换位置,如果是第一页的app拖动最右边或左边的时候翻页并跟第二页的app交换位置,求大神告解,急!急!!
GridView怎么滑动选中的效果
我使用GridView显示多张图片 一行多个 多列 想实现 手指划过后能选定的效果
android viewpager 和gridview怎么用addHeaderView连到一起滑动?
在纵向滑动的时候 横向滑动部分怎么跟着纵向部分一起滑动 ?求答
android 机顶盒 gridview怎样实现翻页
gridview在手机上显示是可以滑动的,但是在机顶盒上只能通过遥控器来控制其焦点来移动, 那么我想到的就是gridview实现翻页,可是翻页应该怎样实现呢?
android gridview 加头部的自定义下拉刷新,(我做的头部下拉了,)上拉加载,有人有吗
![图片说明](https://img-ask.csdn.net/upload/201603/15/1458004465_952931.png)![图片说明](https://img-ask.csdn.net/upload/201603/15/1458004416_136182.png) 这个只有头部下拉了,gridview没有跟着滑动。
关于ViewPager+GridView,实现GridView横向水平滑动的的问题
在网上看了好多DEMO效果都不是想要的然后发现了这个例子下面贴出来 package com.example.bmvod.myapplication; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; public class MainActivity extends Activity { private LinearLayout linear01; private LinearLayout linear02; private List<Map<String, Object>> listView; private int next = 0; private ViewPager adViewPager; private AdPageAdapter adapter; private ImageView[] imageViews; private ImageView imageView; private AtomicInteger atomicInteger = new AtomicInteger(0); private boolean isContinue = true; private List<View> gridViewlist = new ArrayList<View>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { System.out.println("initView()"); linear01 = (LinearLayout) findViewById(R.id.view_pager_content); linear02 = (LinearLayout) findViewById(R.id.viewGroup); listView = new ArrayList<Map<String, Object>>(); //创建ViewPager adViewPager = new ViewPager(this); //获取屏幕像素相关信息 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); //根据屏幕信息设置ViewPager广告容器的宽高 //adViewPager.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels)); //将ViewPager容器设置到布局文件父容器中 linear01.addView(adViewPager); getView(); initCirclePoint(); adViewPager.setAdapter(adapter); adViewPager.addOnPageChangeListener(new AdPageChangeListener()); } /** * ViewPager 页面改变监听器 */ private final class AdPageChangeListener implements OnPageChangeListener { /** * 页面滚动状态发生改变的时候触发 */ @Override public void onPageScrollStateChanged(int arg0) { } /** * 页面滚动的时候触发 */ @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } /** * 页面选中的时候触发 */ @Override public void onPageSelected(int arg0) { //获取当前显示的页面是哪个页面 System.out.println("onPageSelected"); atomicInteger.getAndSet(arg0); //重新设置原点布局集合 for (int i = 0; i < imageViews.length; i++) { imageViews[arg0].setBackgroundResource(R.drawable.point_focused); if (arg0 != i) { imageViews[i].setBackgroundResource(R.drawable.point_unfocused); } } } } private void initCirclePoint() { System.out.println("initCirclePoint()"); imageViews = new ImageView[gridViewlist.size()]; //广告栏的小圆点图标 for (int i = 0; i < gridViewlist.size(); i++) { //创建一个ImageView, 并设置宽高. 将该对象放入到数组中 imageView = new ImageView(this); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT); layoutParams.setMargins(10, 0, 10, 0); imageView.setLayoutParams(layoutParams); imageViews[i] = imageView; //初始值, 默认第0个选中 if (i == 0) { imageViews[i].setBackgroundResource(R.drawable.point_focused); } else { imageViews[i].setBackgroundResource(R.drawable.point_unfocused); } //将小圆点放入到布局中 linear02.addView(imageViews[i]); } } private void getView() { int[] intView = {R.drawable.one, R.drawable.two, R.drawable.three, R.drawable.four, R.drawable.five, R.drawable.six, R.drawable.seven, R.drawable.eight, R.drawable.nine, R.drawable.ten , R.drawable.eleven, R.drawable.twelve, R.drawable.thirteen, R.drawable.fourteen, R.drawable.fifteen, R.drawable.sixteen, R.drawable.seventeen}; for (int i = 0; i < intView.length; i++) { Map<String, Object> mapView = new HashMap<String, Object>(); mapView.put("image", intView[i]); listView.add(mapView); } getGridView(); } private void getGridView() { boolean bool = true; while (bool) { int result = next + 9; if (listView.size() != 0 && result < listView.size()) { GridView gridView = new GridView(this); gridView.setNumColumns(5); gridView.setVerticalSpacing(30); gridView.setHorizontalSpacing(0); List<Map<String, Object>> gridlist = new ArrayList<Map<String, Object>>(); for (int i = next; i < result; i++) { gridlist.add(listView.get(i)); } MyAdapter myAdapter = new MyAdapter(gridlist); gridView.setAdapter(myAdapter); next = result; gridViewlist.add(gridView); } else if (result - listView.size() <= 9) { System.out.println("剩余多少" + (result - listView.size())); List<Map<String, Object>> gridlist = new ArrayList<Map<String, Object>>(); for (int i = next; i < listView.size(); i++) { gridlist.add(listView.get(i)); } GridView gridView = new GridView(this); gridView.setNumColumns(5); MyAdapter myAdapter = new MyAdapter(gridlist); gridView.setAdapter(myAdapter); next = listView.size() - 1; gridViewlist.add(gridView); bool = false; } else { bool = false; } } adapter = new AdPageAdapter(gridViewlist); } private final class AdPageAdapter extends PagerAdapter { private List<View> views = null; /** * 初始化数据源, 即View数组 */ public AdPageAdapter(List<View> views) { this.views = views; } /** * 从ViewPager中删除集合中对应索引的View对象 */ @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(views.get(position)); } /** * 获取ViewPager的个数 */ @Override public int getCount() { return views.size(); } /** * 从View集合中获取对应索引的元素, 并添加到ViewPager中 */ @Override public Object instantiateItem(View container, final int position) { ((ViewPager) container).addView(views.get(position), 0); // views.get(position).setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // System.out.println("position"+position); // Intent intent=new Intent(MainActivity.this,OtherViewPage.class); // MainActivity.this.startActivity(intent); // } // }); return views.get(position); } /** * 是否将显示的ViewPager页面与instantiateItem返回的对象进行关联 * 这个方法是必须实现的 */ @Override public boolean isViewFromObject(View view, Object object) { return view == object; } } private class MyAdapter extends BaseAdapter { List<Map<String, Object>> listgrid; private MyAdapter(List<Map<String, Object>> listgrid) { this.listgrid = listgrid; } @Override public int getCount() { return listgrid.size(); } @Override public Object getItem(int position) { return listgrid.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = getLayoutInflater().inflate(R.layout.grid_view_item, null); ImageView getViewLinear = (ImageView) convertView.findViewById(R.id.getViewLinear); getViewLinear.setBackgroundResource(Integer.parseInt(listgrid.get(position).get("image").toString())); return convertView; } } } ``` ``` 只有两个布局文件一个只有上下两个布局里面的ViewPager和小圆点都写在代码里,另一个就是GRIDVIEW的ITEM 经过测试 gridView.setVerticalSpacing(30);只对当前页有效 翻到第二页上下两个图片间距为0,,,gridView.setHorizontalSpacing(5);无效!求解啊!!!!!
ViewPager中GridView 其中一页删除一项,滑动ViewPager就崩溃,求帮助
ViewPager中GridView 其中一页删除一项,滑动ViewPager就崩溃,求帮助 下面是错误日志: 08-11 16:12:29.663: E/AndroidRuntime(5234): java.util.ConcurrentModificationException 08-11 16:12:29.663: E/AndroidRuntime(5234): at java.util.AbstractList$SubAbstractList.size(AbstractList.java:360) 08-11 16:12:29.663: E/AndroidRuntime(5234): at com.example.launcherdemo.AppsAdapter.getCount(AppsAdapter.java:86) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.GridView.onMeasure(GridView.java:1037) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1381) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1411) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1059) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.onMeasure(LinearLayout.java:590) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.SlidingDrawer.onMeasure(SlidingDrawer.java:275) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1411) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.measureVertical(LinearLayout.java:698) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 08-11 16:12:29.663: E/AndroidRuntime(5234): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2198) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2165) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1249) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1443) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4879) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.Choreographer.doCallbacks(Choreographer.java:579) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.Choreographer.doFrame(Choreographer.java:548) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.os.Handler.handleCallback(Handler.java:725) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.os.Handler.dispatchMessage(Handler.java:92) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.os.Looper.loop(Looper.java:153) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.app.ActivityThread.main(ActivityThread.java:5523) 08-11 16:12:29.663: E/AndroidRuntime(5234): at java.lang.reflect.Method.invokeNative(Native Method) 08-11 16:12:29.663: E/AndroidRuntime(5234): at java.lang.reflect.Method.invoke(Method.java:511) 08-11 16:12:29.663: E/AndroidRuntime(5234): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:835) 08-11 16:12:29.663: E/AndroidRuntime(5234): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 08-11 16:12:29.663: E/AndroidRuntime(5234): at dalvik.system.NativeStart.main(Native Method)
【急】gridView手势移动,更改item背景颜色!
在gridView上手指移动,在移动路径上的item背景颜色发生改变! 如图:![图片说明](https://img-ask.csdn.net/upload/201511/19/1447916422_628466.png) **本人的思路:** _是在Activity里面创建了一个手势的内部类,重写onSroll方法(这个方法是判断用户手势按下之后移动的事件),因为GridView监听是写在activity里面的,在内部类里面的onSroll里面把gridView的监听写在这个里面;gridView监听里面判断position是否相等,然后new adapter类的对象通过对象调用getDropDownView的方法(android的方法,getView差不多)取到显示在item上面的textView的id 然后通过textView对象设置背景颜色,实现上图! 但是发现运行起来的时候只有点击有反应 滑动的时候并没有反应! 求大神解答! 以下是Demo的详细片段_: **存在activity中的内部类:** private class MyGestureListener extends SimpleOnGestureListener { @Override public boolean onScroll( MotionEvent e1, MotionEvent e2, float distanceX, float distanceY ) { int gvFlag = 0; // 每次添加gridview到viewflipper中时给的标记 if ( e1.getX() - e2.getX() > 30 ) { // 像左滑动 // enterNextMonth(gvFlag); // lessonDateAdapter.getItem(position); // Log.d("---->", "::" + gridView.getChildCount()); // gridView.setBackgroundColor(Color.RED); getMonitor(); return true; } else if ( e1.getX() - e2.getX() < -30 ) { // 向右滑动 // enterPrevMonth(gvFlag); getMonitor(); return true; } return false; } } **activity中的gridView监听事件:** public void getMonitor() { gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick( AdapterView<?> parent, View view, int position, long id ) { // 点击任何一个item,得到这个item的日期(排除点击的是周日到周六(点击不响应)) int startPosition = calV.getStartPositon(); int endPosition = calV.getEndPosition(); if ( startPosition <= position + 7 && position <= endPosition - 7 ) { /** 用户点击后弹出对话框 */ if ( gridView.getItemIdAtPosition(position) == position ) { //adapter是new的gridView适配器类的对象; adapter.getDropDownView(position, view, null); // tv_gvItem.setText("----"); } } } }); } **adapter中重写的方法:** @Override publicView getDropDownView( int position, View convertView, ViewGroup parent ) { textView = (TextView) convertView.findViewById(R.id.tvtext); if ( position == getItemId(position) ) { textView.setTextColor(Color.BLUE); } else { textView.setTextColor(Color.RED); } Log.d("---->", ":::" + textView); return convertView; }
android 怎么上下滑动查看多张图片
本来用GridView每行两列排列的图片,现在想让图片单行排列,还能上下滑动查看,该怎么改
如何解决ViewPager+Fragment+GridView实现无限滑动时页面切换的卡顿问题?
最近想自己写一个日历组件,思路是使用ViewPager+Fragment+GridView,如图 (https://img-ask.csdn.net/upload/201902/27/1551263494_687583.png) 最外层是一个DialogFragment 如果正常滑动,没有任何问题,但在快速滑动的时候,在滑到Fragment1和4时进行setCurrentItem时,会发生卡顿现象,即没有即时跳转导致已达到边界无法继续滑动的情况 慢滑 (https://img-ask.csdn.net/upload/201902/27/1551269528_523451.gif) 快滑 (https://img-ask.csdn.net/upload/201902/27/1551269556_845553.gif) 我自己尝试过的解决办法: 1. 一开始我以为是Fragment中布局过于复杂,导致在刷新数据时卡顿,但即时我去掉Fragment中的所有布局,仍会发生卡顿现象 2.后来我将问题定位在ViewPager的事件分发上,将ViewPager的自定义,将onInterceptTouchEvent方法复写直接返回true,现象消失,滑动无问题,但由于GridView中需要响应点击事件,所以我又做了事件拦截的判断,但无论怎么判断,只要不直接返回true,该现象就会发生 下面贴上我的部分代码: 1. 我在DialogFragment中为ViewPager绑定监听事件,在onPageScrollStateChanged中判断页面是否跳转,在页面滑到最左最右时进行跳转 ``` //滑动状态监听 override fun onPageScrollStateChanged(p0: Int) { //1时表示正在滑动、2时表示滑动完毕、0时什么都没做,滑动时变化顺序为1>2>0 //在0时设置页面位置互换 if (p0 == 0){ position = calViewPager.currentItem when (position) { 0 -> { //到达最左侧Fragment时,刷新倒数第二个Fragment的数据与其保持一致,然后跳转,刷新部分代码省略 calViewPager.setCurrentItem(2, false) //跳转完成后刷新其余页面,代码省略 } 3 -> { //到达最右侧Fragment时,刷新第二个Fragment的数据与其保持一致,然后跳转,刷新部分代码省略 calViewPager.setCurrentItem(1, false) //跳转完成后刷新其余页面,代码省略 } 2 -> { //数据刷新,代码省略 } 1 -> { //数据刷新,代码省略 } } } } ``` 2.自定义了ViewPager,进行了事件拦截处理 ``` private var xPosition:Float? = null // 滑动点击判断、拦截 override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { val res = super.onInterceptTouchEvent(ev) xPosition = if (ev!!.action == MotionEvent.ACTION_DOWN){ ev.x }else{ if (Math.abs(ev.x - xPosition!!) > 0){ return true }else{ ev.x } } return res } ``` 3.ViewPager的Adapter ``` class MyCalendarViewPagerAdapter(fm: FragmentManager, private var fragmentsList:MutableList<Fragment>): FragmentPagerAdapter(fm){ //Fragment个数 override fun getCount(): Int { return fragmentsList.size } override fun getItem(p0: Int): Fragment { return fragmentsList[p0] } //不销毁Item override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { } override fun getItemPosition(`object`: Any): Int { return PagerAdapter.POSITION_NONE } } ``` 4.在Fragment中是使用回调进行的数据更新,代码就不上了 这个问题已经困扰我两周了 求大佬指点
ListView中嵌套GridView内存释放问题
一个Activity 中ListView中嵌套GridView,gridView中展示了9张图片,滑动的时候内存涨了40M左右,但当我销毁Activity时,这40M没有释放,是怎么回事?要如何才能释放这些内存呢?
gridview加载图片会乱而且重复
我用gridview加载tomcat服务器上的图片,但是显示出来后会乱而且重复,滑动后图片又变成其他的了,我查了下是position的问题,但是实在不知道该怎么去修改
Gridview 点击图像显示成gallery view
程序显示图像如 gridview,点击任何图像显示 gallery view,使用 viewpager 能左右滑动。 代码如下: public class MemorialPhotoAlbumViewpager extends FragmentActivity { static Activity MemorialPhotoAlbumViewpagerActivity; int positionstate = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); String[] myStrings = intent.getStringArrayExtra("ArrayphotoAlbum"); int position = intent.getIntExtra("position", 0); setContentView(R.layout.photo_album_viewpager); if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } 我能显示但是 ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); ImagePagerAdapter adapter = new ImagePagerAdapter(myStrings,position); viewPager.setAdapter(adapter); } private class ImagePagerAdapter extends PagerAdapter { private String[] ArrayphotoAlbumb; private int positionb; public ImagePagerAdapter(String[] myStrings, int position) { ArrayphotoAlbumb = myStrings; positionb = position; } @Override public int getCount() { return ArrayphotoAlbumb.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == ((ImageView) object); } @Override public Object instantiateItem(ViewGroup container, int position) { Context context = MemorialPhotoAlbumViewpager.this; ImageView imageView = new ImageView(context); String test = ArrayphotoAlbumb[position]; Bitmap bimage= getBitmapFromURL(test); imageView.setImageBitmap(bimage); ((ViewPager) container).addView(imageView, 0); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView((ImageView) object); } } public static Bitmap getBitmapFromURL(String src) { try { URL url = new URL(src); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); return myBitmap; } catch (IOException e) { e.printStackTrace(); return null; } 程序现在能显示,但是 viewpager 位置总是从0开始,如果我在 gridview 上点击第二幅图像,使用 viewpager 显示,允许向左滑动来显示第一个图像。
android软键盘影响布局问题
大布局整体为,上面是一个搜索edittext,然后有一个banner,下面是一个scrollview,scrollview里面有一个imageview,imageview下面是gridview。(别问我为什么这样) 问题:我点击edittext,输入文字后,在点击搜索跳转页面时,scrollview里面的imageview会自动隐藏,当你返回搜索页面时,滑动scrollview才能滑出来。如果不搜索,直接跳转其他页面,就正常。哪位大神帮忙解释一下
android相册shang 时间轴是怎么实现的啊?
我见现在很多android手机的系统相册滑动的时候,都会在左边时间轴上显示相应的时间等信息。或者在右侧的scrollbar上显示信息,这该怎么实现啊? 我用gridview实现了分组显示图片,可以按年月日,但是那是在每组头部显示。不知道怎么才能在时间轴上捕获这年月日信息。。。求大神指点迷津
关于滑动冲突的问题 求
如图 左边是个litview 右边是个gridview 用一个scrollview包裹了他们 现在我是想他们三个都能单独滑动。。。![图片说明](https://img-ask.csdn.net/upload/201604/27/1461747217_158533.png)
GridView超出屏幕时,数据没保存会重复显示
我在GridView中用SimpleAdapter的getView()方法加载适配器,每个Item里有一个ImageView 和一个TextView,还有一个ImageView显示打勾的图片,当我在第一个ImageView打勾保存时,滑动在最下面,最下面的Item对自动打勾,并且第一个打勾会消失, 查了一下,好像是出现这种现象的原因,是当最上边的item移除屏幕后,它的对象会被缓存。而下一个要从底部出来,要显示的item出现的时候,会判断其布局(context)与缓存中的是否一样。一样的情况下,会把缓存里的context作为getView的参数传进来。这样在画最后一个item的时候,由于没有对ImageView做任何改动,所以系统就将第一个的ImageView 内容显示出来了。现在不知道怎么改求大神指导下![图片说明](https://img-ask.csdn.net/upload/201501/19/1421673220_93294.png) ``` public class AddActivity extends Activity { private GridView gridView; private TextView checkNum; private List<HashMap<String, Object>> list; private HashMap<String, Object> hashMap; private SimpleAdapter adapter; private String texts[] = null; private int images[] = null; private int num=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_activity); gridView = (GridView) findViewById(R.id.gridview); checkNum = (TextView) findViewById(R.id.check_num); list = new ArrayList<HashMap<String,Object>>(); images=new int[]{R.drawable.windy_7, R.drawable.ray_100, R.drawable.yundong, R.drawable.ganmao, R.drawable.xiche,R.drawable.liangshai, R.drawable.fishing}; texts = new String[]{ "风力风向", "紫外线", "运动提示", "感冒提示", "洗车提示", "晾晒提示", "旅游提示"}; for(int i=0;i<images.length;i++){ hashMap=new HashMap<String, Object>(); hashMap.put("imageView",images[i]); hashMap.put("nameView", texts[i]); hashMap.put("imageCheck", R.drawable.checkmark_small); list.add(hashMap); } adapter = new SimpleAdapter(this, list, R.layout.gird_activity_item, new String[]{"imageView","nameView","imageCheck"}, new int[]{R.id.grid_img,R.id.grid_text,R.id.check}); gridView.setAdapter(adapter); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) { ImageView checkImage=(ImageView) view.findViewById(R.id.check); switch (images[position]) { case R.drawable.windy_7: if (checkImage.getVisibility() == View.VISIBLE){ checkImage.setVisibility(View.INVISIBLE); num--; checkNum.setText(String.valueOf(num)); }else { checkImage.setVisibility(View.VISIBLE); num++; checkNum.setText(String.valueOf(num)); } break; case R.drawable.ray_100: if (checkImage.getVisibility() == View.VISIBLE){ checkImage.setVisibility(View.INVISIBLE); num--; checkNum.setText(String.valueOf(num)); }else { checkImage.setVisibility(View.VISIBLE); num++; checkNum.setText(String.valueOf(num)); } break; case R.drawable.yundong: if (checkImage.getVisibility() == View.VISIBLE){ checkImage.setVisibility(View.INVISIBLE); num--; checkNum.setText(String.valueOf(num)); }else { checkImage.setVisibility(View.VISIBLE); num++; checkNum.setText(String.valueOf(num)); } break; case R.drawable.ganmao: if (checkImage.getVisibility() == View.VISIBLE){ checkImage.setVisibility(View.INVISIBLE); num--; checkNum.setText(String.valueOf(num)); }else { checkImage.setVisibility(View.VISIBLE); num++; checkNum.setText(String.valueOf(num)); } break; case R.drawable.xiche: if (checkImage.getVisibility() == View.VISIBLE){ checkImage.setVisibility(View.INVISIBLE); num--; checkNum.setText(String.valueOf(num)); }else { checkImage.setVisibility(View.VISIBLE); num++; checkNum.setText(String.valueOf(num)); } break; case R.drawable.liangshai: if (checkImage.getVisibility() == View.VISIBLE){ checkImage.setVisibility(View.INVISIBLE); num--; checkNum.setText(String.valueOf(num)); }else { checkImage.setVisibility(View.VISIBLE); num++; checkNum.setText(String.valueOf(num)); } break; case R.drawable.fishing: if (checkImage.getVisibility() == View.VISIBLE){ checkImage.setVisibility(View.INVISIBLE); num--; checkNum.setText(String.valueOf(num)); }else { checkImage.setVisibility(View.VISIBLE); num++; checkNum.setText(String.valueOf(num)); } break; } } }); } } ```
很棘手的问题,关于gridview加载图片
* 1. * 我的问题是用画布标记已经选中的图片,选中之后如果不重用view被选中的状态划过去再划过来是存在的,如果重用的话就会内存溢出,下面是我的代码,请哪位大帮忙看一看。 ``` package com.yonyou.uap.um.control.image; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; import android.animation.Animator; import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.os.Build; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.animation.AccelerateDecelerateInterpolator; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.ImageView; import com.yonyou.uap.um.animation.UMAnimatorUpdateListener; import com.yonyou.uap.um.base.UMAttributeHelper; import com.yonyou.uap.um.control.ImageSelector; import com.yonyou.uap.um.core.UMActivity; import com.yonyou.uap.um.util.BitmapUtil; public class ImageSelectorAdapter extends BaseAdapter { private static final String TAG = ImageSelectorAdapter.class.getName(); public static final float SCALE = 0.92f; private List<ImageItem> mImages = null; private Context mContext = null; private static Bitmap select_icon = null; private static Paint select_paint = null; private ImageSelector mControl = null; static { select_icon = Bitmap.createScaledBitmap( BitmapUtil.getBitmapFromSrc("", "icon_data_select.png"), UMAttributeHelper.getSize(30 + ""), UMAttributeHelper.getSize(30 + ""), true); select_paint = new Paint(); select_paint.setColor(Color.RED); select_paint.setStyle(Paint.Style.STROKE); select_paint.setStrokeWidth(4); } public ImageSelectorAdapter(Context ctx, ImageSelector control, List<ImageItem> images) { if (ctx == null) { throw new Error("ctx is null"); } mControl = control; mImages = images; if (mImages == null) { mImages = new ArrayList<ImageItem>(); } mContext = ctx; } @Override public int getCount() { int count = 0; if (mImages != null) { count = mImages.size(); } return count; } @Override public Object getItem(int position) { return mImages.get(position); } @Override public long getItemId(int position) { return position; } private Set<Integer> selectedItems = new HashSet<Integer>(); private HashMap<Integer, ImageViewItem> mCache = new HashMap<Integer, ImageViewItem>(); @SuppressLint("NewApi") @Override public View getView(int position, View convertView, ViewGroup parent) { ImageViewItem rs = null; if (mCache.containsKey(position)) { rs = mCache.get(position); } else { rs = this.new ImageViewItem(mContext); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) { rs.setId(View.generateViewId()); } else { rs.setId(100000 + position); } rs.setImageBitmap(BitmapUtil.loadIdImage( "friends_sends_pictures_no", mContext)); final ImageItem item = (ImageItem) getItem(position); rs.loadImageFromPath(item.getImagePath()); rs.setOnClickListener(new ImageViewItemClick(position)); AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, mControl.getRowHeight()); rs.setLayoutParams(lp); // rs.setOnLongClickListener(new View.OnLongClickListener() { // // @Override // public boolean onLongClick(View v) { // mControl.showImageView(item.getImagePath()); // return true; // } // }); mCache.put(position, rs); } return rs; } @SuppressLint("NewApi") private View convertTest(int position, View convertView) { ImageViewItem rs = null; if (convertView == null) { rs = this.new ImageViewItem(mContext); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) { rs.setId(View.generateViewId()); } else { rs.setId(100000 + position); } } else { rs = (ImageViewItem) convertView; } rs.setImageBitmap(BitmapUtil.loadIdImage("friends_sends_pictures_no", mContext)); ImageItem item = (ImageItem) getItem(position); rs.loadImageFromPath(item.getImagePath()); rs.setOnClickListener(new ImageViewItemClick(position)); AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, mControl.getRowHeight()); rs.setLayoutParams(lp); return rs; } private class ImageViewLoader implements Runnable { private String path = ""; private ImageViewItem item = null; private Bitmap bitmap = null; public ImageViewLoader(ImageViewItem rs, String p) { // rs.beginLoad(); item = rs; path = p; } @Override public void run() { long start = System.currentTimeMillis(); BitmapFactory.Options options = new BitmapFactory.Options(); // 设置为true,表示解析Bitmap对象,该对象不占内存 options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); // 设置缩放比例 options.inSampleSize = computeScale(options, 300, 200); // 设置为false,解析Bitmap对象加入到内存中 options.inJustDecodeBounds = false; bitmap = BitmapFactory.decodeFile(path, options); Log.d(ImageSelectorAdapter.TAG, "load image - " + (System.currentTimeMillis() - start)); Activity ctx = (Activity) ImageSelectorAdapter.this.mContext; // if (Thread.interrupted()) { // return; // } ctx.runOnUiThread(new Runnable() { @Override public void run() { item.setImageBitmap(bitmap); item.setTag(bitmap); } }); } } /** * 根据View(主要是ImageView)的宽和高来计算Bitmap缩放比例。默认不缩放 * * @param options * @param width * @param height */ private int computeScale(BitmapFactory.Options options, int viewWidth, int viewHeight) { int inSampleSize = 1; if (viewWidth == 0 || viewWidth == 0) { return inSampleSize; } int bitmapWidth = options.outWidth; int bitmapHeight = options.outHeight; // 假如Bitmap的宽度或高度大于我们设定图片的View的宽高,则计算缩放比例 if (bitmapWidth > viewWidth || bitmapHeight > viewWidth) { int widthScale = Math .round((float) bitmapWidth / (float) viewWidth); int heightScale = Math.round((float) bitmapHeight / (float) viewWidth); // 为了保证图片不缩放变形,我们取宽高比例最小的那个 inSampleSize = widthScale < heightScale ? widthScale : heightScale; } return inSampleSize; } private class ImageViewItemClick implements View.OnClickListener { private int mPosition = 0; public ImageViewItemClick(int position) { mPosition = position; } @Override public void onClick(View v) { ImageViewItem item = (ImageViewItem) v; item._switch(); if (item.isSelected()) { ImageSelectorAdapter.this.selectedItems.add(mPosition); item.setAlpha(100); } else { if (ImageSelectorAdapter.this.selectedItems.contains(mPosition)) { ImageSelectorAdapter.this.selectedItems.remove(mPosition); item.setAlpha(255); } } Log.e("PATH", "路径:" + mImages.get(mPosition).imagePath); } } private class ImageViewItem extends ImageView { public ImageViewItem(Context context) { super(context); this.setScaleType(ScaleType.CENTER_CROP); } private Thread loader = null; private boolean mIsSelectedItem = false; public synchronized void loadImageFromPath(String path) { loader = new Thread(new ImageViewLoader(this, path)); loader.start(); } public boolean isSelectedItem() { return mIsSelectedItem; } public void setSelectedItem(boolean value) { this.mIsSelectedItem = value; } private void _switch() { this.setSelectedItem(!this.isSelectedItem()); this.invalidate(); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: this.setScaleX(ImageSelectorAdapter.SCALE); this.setScaleY(ImageSelectorAdapter.SCALE); break; case MotionEvent.ACTION_UP: resetScale(); break; case MotionEvent.ACTION_CANCEL: resetScale(); break; default: break; } return super.onTouchEvent(event); } private void resetScale() { this.setScaleX(1f); this.setScaleY(1f); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); setMeasuredDimension(width, width); } // public void _switch(boolean value) { // setImageItemSelected(value); // Log.e(ImageSelectorAdapter.TAG, " switch to(" + this.getId() // + ") - " + value); // this.invalidate(); // } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Log.e(ImageSelectorAdapter.TAG, " onDraw(" + this.getId() + ") - " + this.isSelected()); if (this.isSelectedItem()) { Rect rect = canvas.getClipBounds(); canvas.drawRect(rect, select_paint); canvas.drawBitmap(select_icon, 60, 10, select_paint); } } } } ``` 尝试过很多结局办法了,还有一种情况会发生,就是内存不溢出状态也在,就是有时候有的图片点击事件不起作用,滑动,被点击的图片才会被标记上。
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问